麒麟系统离线安装docker和docker-compose
<p>最近需要在麒麟系统安装emqx,由于emqx没有麒麟系统的安装包且源码编译依赖版本较难管理,因此采用docker容器化部署,现在回忆总结一下docker和docker-compose的离线安装步骤。<br>这里是麒麟系统emqx离线部署教程回忆版:https://www.cnblogs.com/scales123/p/19279440</p>
<h1 id="1-准备工作">1 准备工作</h1>
<p>我安装的操作系统是麒麟V4及V10,aarch64架构</p>
<h2 id="11-查看操作系统">1.1 查看操作系统</h2>
<pre><code>// 查看系统版本
uname -a
// 查看系统架构
uname -m
</code></pre>
<h2 id="12-下载安装包">1.2 下载安装包</h2>
<p>我使用的docker版本是:docker-20.10.7.tgz,docker-compose版本是v2.17.2,我整理的下载资源:通过网盘分享的文件:docker_20.10.17安装包.rar<br>
链接: https://pan.baidu.com/s/1LbFJDHMTcpblSUAiMpfteQ?pwd=1234 提取码: 1234</p>
<p>官方下载链接:</p>
<ul>
<li>docker:https://download.docker.com/linux/static/stable/aarch64/</li>
<li>dcoker-compose: https://github.com/docker/compose/releases</li>
</ul>
<p>选择aarch64架构<br>
<img src="https://img2024.cnblogs.com/blog/1923167/202511/1923167-20251127200947473-324035074.png"><br>
选择对应的版本<br>
<img src="https://img2024.cnblogs.com/blog/1923167/202511/1923167-20251127201044457-29292245.png"><br>
找到docker的对应版本,在Assets里选择相应架构的安装包<br>
<img src="https://img2024.cnblogs.com/blog/1923167/202511/1923167-20251127194956488-163998495.png"></p>
<h2 id="13-准备dockerservice文件">1.3 准备docker.service文件</h2>
<pre><code>docker.service
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
WantedBy=multi-user.target
</code></pre>
<h1 id="3-安装docker和docker-compose">3 安装docker和docker-compose</h1>
<p>以下命令逐步执行</p>
<pre><code>// 将安装包存放到/opt/docker
scp -r 本地存放目录 用户名@remote_host:/opt/docker
// 进入安装文件存放目录
cd /opt/docker
// 解压 docker 到当前目录
tar -xvf docker-20.10.7.tgz
// 将 docker 文件移动到 /usr/bin 目录下
cp -p docker/* /usr/bin
// 将 docker-compose 文件复制到 /usr/local/bin/ 目录下,并重命名为 docker-compose
cp docker-compose-linux-aarch64 /usr/local/bin/docker-compose
// 设置 docker-compose 文件权限
chmod +x /usr/local/bin/docker-compose
// 将 docker.service 移到 /etc/systemd/system/ 目录
cp docker.service /etc/systemd/system/
// 设置 docker.service 文件权限
chmod +x /etc/systemd/system/docker.service
// 重新加载配置文件
systemctl daemon-reload
// 启动docker
systemctl start docker
// 设置 docker 开机自启
systemctl enable docker.service
// 验证docker是否安装成功
docker -v
// 验证docker-compose是否安装成功
docker-compose -v
</code></pre>
<h1 id="4-docker常用命令">4 docker常用命令</h1>
<h2 id="41-镜像相关命令">4.1 镜像相关命令</h2>
<p>创建容器的基础。</p>
<table>
<thead>
<tr>
<th style="text-align: left">命令</th>
<th style="text-align: left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left"><code>docker images</code></td>
<td style="text-align: left">列出本地所有镜像</td>
</tr>
<tr>
<td style="text-align: left"><code>docker search <镜像名></code></td>
<td style="text-align: left">从 Docker Hub 搜索镜像</td>
</tr>
<tr>
<td style="text-align: left"><code>docker pull <镜像名>[:标签]</code></td>
<td style="text-align: left">下载镜像(不指定标签则默认为 <code>latest</code>)</td>
</tr>
<tr>
<td style="text-align: left"><code>docker rmi <镜像ID或名></code></td>
<td style="text-align: left">删除<strong>一个</strong>本地镜像</td>
</tr>
<tr>
<td style="text-align: left"><code>docker rmi $(docker images -q)</code></td>
<td style="text-align: left">删除<strong>所有</strong>本地镜像</td>
</tr>
<tr>
<td style="text-align: left"><code>docker image prune</code></td>
<td style="text-align: left">删除所有未被使用的镜像(悬空镜像)</td>
</tr>
<tr>
<td style="text-align: left"><code>docker build -t <镜像名>[:标签] .</code></td>
<td style="text-align: left">根据当前目录的 Dockerfile 构建镜像</td>
</tr>
<tr>
<td style="text-align: left"><code>docker history <镜像名></code></td>
<td style="text-align: left">查看镜像的构建历史层</td>
</tr>
<tr>
<td style="text-align: left"><code>docker tag <旧镜像名> <新镜像名></code></td>
<td style="text-align: left">给镜像打一个新的标签</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-bash">docker pull nginx:alpine
docker images
docker rmi 5dbe117b5cf4
docker build -t my-app:v1 .
</code></pre>
<h2 id="42-容器生命周期管理">4.2 容器生命周期管理</h2>
<p>用于创建、启动、停止、删除容器。</p>
<table>
<thead>
<tr>
<th style="text-align: left">命令</th>
<th style="text-align: left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left"><code>docker run [选项] <镜像名></code></td>
<td style="text-align: left"><strong>创建并启动</strong>一个新容器</td>
</tr>
<tr>
<td style="text-align: left"><code>docker create <镜像名></code></td>
<td style="text-align: left">只创建容器,但不启动</td>
</tr>
<tr>
<td style="text-align: left"><code>docker start <容器ID或名></code></td>
<td style="text-align: left">启动一个已存在的容器</td>
</tr>
<tr>
<td style="text-align: left"><code>docker stop <容器ID或名></code></td>
<td style="text-align: left"><strong>优雅地停止</strong>一个运行中的容器</td>
</tr>
<tr>
<td style="text-align: left"><code>docker restart <容器ID或名></code></td>
<td style="text-align: left">重启容器</td>
</tr>
<tr>
<td style="text-align: left"><code>docker kill <容器ID或名></code></td>
<td style="text-align: left"><strong>强制立即停止</strong>一个容器</td>
</tr>
<tr>
<td style="text-align: left"><code>docker pause <容器ID或名></code></td>
<td style="text-align: left">暂停容器内的所有进程</td>
</tr>
<tr>
<td style="text-align: left"><code>docker unpause <容器ID或名></code></td>
<td style="text-align: left">恢复容器内被暂停的进程</td>
</tr>
<tr>
<td style="text-align: left"><code>docker rm <容器ID或名></code></td>
<td style="text-align: left">删除<strong>一个已停止</strong>的容器</td>
</tr>
<tr>
<td style="text-align: left"><code>docker rm $(docker ps -aq)</code></td>
<td style="text-align: left">删除<strong>所有已停止</strong>的容器</td>
</tr>
<tr>
<td style="text-align: left"><code>docker container prune</code></td>
<td style="text-align: left">删除所有已停止的容器</td>
</tr>
</tbody>
</table>
<p><strong><code>docker run</code> 常用选项:</strong></p>
<ul>
<li><code>-d</code>:后台运行(守护进程)</li>
<li><code>-it</code>:交互模式运行(通常与 <code>/bin/bash</code> 结合)</li>
<li><code>--name</code>:为容器指定一个名称</li>
<li><code>-p <主机端口>:<容器端口></code>:映射端口</li>
<li><code>-v <主机目录>:<容器目录></code>:挂载数据卷</li>
<li><code>--rm</code>:容器退出时自动删除(用于测试)</li>
<li><code>-e</code>:设置环境变量</li>
</ul>
<p><strong>示例:</strong></p>
<pre><code class="language-bash"># 后台运行一个名为 my-nginx 的容器,并映射端口
docker run -d --name my-nginx -p 80:80 nginx
# 交互式运行一个 Ubuntu 容器,并进入其终端
docker run -it ubuntu /bin/bash
# 运行一个一次性容器,退出后自动删除
docker run --rm -it alpine /bin/sh
</code></pre>
<h2 id="43-容器信息查看与操作">4.3 容器信息查看与操作</h2>
<p>用于查看和与正在运行的容器交互。</p>
<table>
<thead>
<tr>
<th style="text-align: left">命令</th>
<th style="text-align: left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left"><code>docker ps</code></td>
<td style="text-align: left">列出<strong>正在运行</strong>的容器</td>
</tr>
<tr>
<td style="text-align: left"><code>docker ps -a</code></td>
<td style="text-align: left">列出<strong>所有</strong>容器(包括已停止的)</td>
</tr>
<tr>
<td style="text-align: left"><code>docker logs <容器ID或名></code></td>
<td style="text-align: left">查看容器的日志输出</td>
</tr>
<tr>
<td style="text-align: left"><code>docker logs -f <容器ID或名></code></td>
<td style="text-align: left"><strong>实时跟踪</strong>(Follow)容器日志</td>
</tr>
<tr>
<td style="text-align: left"><code>docker exec -it <容器ID或名> <命令></code></td>
<td style="text-align: left">在<strong>正在运行</strong>的容器中执行命令</td>
</tr>
<tr>
<td style="text-align: left"><code>docker attach <容器ID或名></code></td>
<td style="text-align: left">连接到正在运行的容器的主进程(不推荐,容易导致容器停止)</td>
</tr>
<tr>
<td style="text-align: left"><code>docker top <容器ID或名></code></td>
<td style="text-align: left">查看容器内运行的进程</td>
</tr>
<tr>
<td style="text-align: left"><code>docker inspect <容器ID或名></code></td>
<td style="text-align: left">查看容器的底层详细信息(JSON格式)</td>
</tr>
<tr>
<td style="text-align: left"><code>docker stats</code></td>
<td style="text-align: left">动态显示所有容器的资源使用情况(CPU、内存等)</td>
</tr>
<tr>
<td style="text-align: left"><code>docker diff <容器ID或名></code></td>
<td style="text-align: left">检查容器文件系统相对于镜像的更改</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-bash">docker ps -a
docker logs -f my-nginx
docker exec -it my-nginx /bin/bash# 进入容器的 Shell
docker inspect my-nginx | grep IPAddress# 查看容器的 IP 地址
</code></pre>
<h2 id="44-数据卷与网络管理">4.4 数据卷与网络管理</h2>
<p>用于管理容器的持久化数据和网络连接。</p>
<table>
<thead>
<tr>
<th style="text-align: left">命令</th>
<th style="text-align: left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left"><code>docker volume ls</code></td>
<td style="text-align: left">列出所有数据卷</td>
</tr>
<tr>
<td style="text-align: left"><code>docker volume create <卷名></code></td>
<td style="text-align: left">创建一个数据卷</td>
</tr>
<tr>
<td style="text-align: left"><code>docker volume inspect <卷名></code></td>
<td style="text-align: left">查看数据卷的详细信息</td>
</tr>
<tr>
<td style="text-align: left"><code>docker volume rm <卷名></code></td>
<td style="text-align: left">删除一个数据卷</td>
</tr>
<tr>
<td style="text-align: left"><code>docker volume prune</code></td>
<td style="text-align: left">删除所有未被使用的数据卷</td>
</tr>
<tr>
<td style="text-align: left"><code>docker network ls</code></td>
<td style="text-align: left">列出所有网络</td>
</tr>
<tr>
<td style="text-align: left"><code>docker network create <网络名></code></td>
<td style="text-align: left">创建一个自定义网络</td>
</tr>
<tr>
<td style="text-align: left"><code>docker network connect <网络名> <容器名></code></td>
<td style="text-align: left">将容器连接到指定网络</td>
</tr>
<tr>
<td style="text-align: left"><code>docker network inspect <网络名></code></td>
<td style="text-align: left">查看网络的详细信息</td>
</tr>
</tbody>
</table>
<p><strong>示例:</strong></p>
<pre><code class="language-bash"># 创建一个数据卷,并运行一个使用该卷的容器
docker volume create my-data
docker run -v my-data:/data --name data-container alpine
# 创建一个自定义的桥接网络,让容器间可以通过容器名通信
docker network create my-app-network
docker run -d --name mysql --network my-app-network mysql
docker run -d --name webapp --network my-app-network my-web-app
</code></pre>
<hr>
<h2 id="45-docker-compose-常用命令">4.5 Docker Compose 常用命令</h2>
<p>用于管理和运行多容器应用。</p>
<table>
<thead>
<tr>
<th style="text-align: left">命令</th>
<th style="text-align: left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left"><code>docker-compose up</code></td>
<td style="text-align: left">创建并启动所有服务(在前台运行)</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose up -d</code></td>
<td style="text-align: left">创建并启动所有服务(在后台运行)</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose down</code></td>
<td style="text-align: left"><strong>停止并删除</strong>所有容器、网络</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose stop</code></td>
<td style="text-align: left">停止所有服务,但不删除容器</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose start</code></td>
<td style="text-align: left">启动已存在的服务</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose restart</code></td>
<td style="text-align: left">重启所有服务</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose ps</code></td>
<td style="text-align: left">列出 Compose 文件定义的所有容器</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose logs</code></td>
<td style="text-align: left">查看所有服务的日志</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose logs -f <服务名></code></td>
<td style="text-align: left">实时跟踪特定服务的日志</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose exec <服务名> <命令></code></td>
<td style="text-align: left">在指定的服务容器中执行命令</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose build</code></td>
<td style="text-align: left">构建或重新构建服务镜像</td>
</tr>
<tr>
<td style="text-align: left"><code>docker-compose pull</code></td>
<td style="text-align: left">下载服务镜像</td>
</tr>
</tbody>
</table>
<h1 id="5-参考">5 参考</h1>
<blockquote>
<p>https://blog.csdn.net/qq_23845083/article/details/130768859</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/scales123/p/19279303
頁:
[1]