侧边栏壁纸
博主头像
小新笔记坊

笔耕学思悟,细绘生活卷。

  • 累计撰写 52 篇文章
  • 累计创建 23 个标签
  • 累计收到 49 条评论

目 录CONTENT

文章目录

docker常用指令及心得

小新笔记坊
2024-11-11 / 1 评论 / 0 点赞 / 35 阅读 / 0 字 / 正在检测是否收录...

使用环境

操作系统:CentOS

常用指令

加载镜像

docker load -i image.tar.gz

删除镜像

docker rmi 1678ce6ee5f6

注:1678ce6ee5f6为镜像id或REPOSITORY。

列出所有镜像

docker images

停止容器

docker stop my_container

删除容器

docker rm c0420893e76d

列出运行的容器

docker ps -a

进入容器

docker exec -it 容器id /bin/sh

容器开机自启

docker update --restart=unless-stopped 容器ID

取消容器开机自启

docker update --restart=no 容器id

查看容器日志

docker logs c0420893e76d

安装docker

安装docker

1.安装需要的软件包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2.设置镜仓库

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.安装docker

sudo yum install docker-ce

4.启动 Docker 服务并设置为开机启动

sudo systemctl start docker
sudo systemctl enable docker

5.验证是否安装成功

docker --version

安装Docker Compose

1.下载Docker Compose并将其上传至服务器/usr/local/bin/目录下

2.赋予执行权限

sudo chmod +x /usr/local/bin/docker-compose

3.验证安装

docker-compose --version

Win系统docker镜像导入导出方案

拉取镜像

X86架构

1.安装Docker Desktop

2.docker hub上寻找对应系统架构的docker镜像。

3.运行Docker Desktop,打开cmd,粘贴docker hub上复制的docker镜像拉取命令。

docker pull node

ARM架构

1.安装Docker Desktop

2.docker hub上寻找对应系统架构的docker镜像。

3.创建Buildx构建器,命令行输入以下代码。

docker buildx create --use

4.验证Buildx构建器是否安装成功。

docker buildx ls
#输出以下即为成功创建
NAME/NODE            DRIVER/ENDPOINT     STATUS     BUILDKIT   PLATFORMS
zealous_black*       docker-container
 \_ zealous_black0    \_ desktop-linux   inactive
default              docker
 \_ default           \_ default         running    v0.16.0    linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
desktop-linux        docker
 \_ desktop-linux     \_ desktop-linux   running    v0.16.0    linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

5.安装QEMU模拟器。

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

6.运行Docker Desktop,打开命令行,粘贴docker hub上复制的docker镜像拉取命令。

docker buildx build --platform linux/arm64 -t arm64v8/node --load .

7.运行docker镜像

docker run -it --rm --platform linux/arm64 arm64v8/node

导出镜像

1.导出。

docker save f2178fed85e4 -o D:\arm_node.tar

注:f2178fed85e4为docker镜像id,在docker desktop的images镜像列表上,不要点copu,鼠标移动上去复制。

导入镜像

1.上传tar文件至服务器,即arm_node.tar

2.导入镜像。

docker load < arm_node.tar
#例如输出结果如下
63ca1fbb43ae: Loading layer [==================================================>]  8.082MB/8.082MB
b79dd9ce9c96: Loading layer [==================================================>]  21.83MB/21.83MB
5e2decf062d9: Loading layer [==================================================>]  4.608kB/4.608kB
940172648c6a: Loading layer [==================================================>]  173.6MB/173.6MB
Loaded image ID: sha256:def2de5a9550d90c34a421bea490a0e5e7467b25a496945183ff25fb9006a833

3.验证镜像。

docker images

4.运行镜像

#运行
docker run 7ac916d75750
#或使用docker项目规定指令运行,例如
docker run -d -p 8002:8002 -v /var/www/html/musicTag/musci:/app/media -v /var/www/html/musicTag:/app/data --restart=always def2de5a9550

设置SSH远程连接容器

注:以操作系统为CentOS8为例。

1.拉取CentOS镜像并运行容器。

docker run -d --name centos8_yes_ssh --privileged=true centos8_yes_ssh /usr/sbin/init

注:如通过可视化运维面板拉取镜像并运行容器,务必在“启动命令”中填入“/usr/sbin/init”,同时在“功能”内启用“最高权限执行容器”,即运行容器时启动“systemd”,如此才能在该容器中运行多个实例。

2.进入容器后验证systemd是否启用。

systemctl status

3.清理容器内CentOS系统的源。

cd /etc/yum.repos.d/
rm -rf *.repo

4.下载阿里源。

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

5.清除缓存,并且更换源。

yum clean all
yum makecache
yum update

6.下载用户密码管理模块。

yum install passwd 

7.设置root账户密码。

passwd root

8.下载ssh模块。

yum install openssh-server

9.启用ssh,并设置容器开机自启动。

systemctl start sshd
systemctl enable sshd
systemctl status sshd

10.编辑/etc/ssh/sshd_config文件,找到Port 22,修改ssh的连接端口为2222

vi /etc/ssh/sshd_config
systemctl restart sshd
systemctl status sshd

注:i进行编辑内容,esc+:+wq+回车进行保存并退出。

自建容器的思路

注:一定要在搭建好环境后,在容器运行时进行导出镜像!因为一旦停止容器,下次重新启动容器时是从镜像启动容器的,因此做的设置会无法保存!在容器运行时导出镜像会将容器内数据保存。

1.拉取一个CentOS系统的镜像。

2.通过该镜像创建并运行容器。

docker load -i image.tar.gz

3.容器内安装SSH。

4.SSH远程至容器内部搭建环境。

5.将要映射至宿主机的文件目录数据拷出备份,同时设置要映射至宿主机的文件目录允许任何人读写、执行。

chmod 777 目录路径
chmod +x 文件路径

6.单独给要映射至宿主机的文件目录中的可执行程序设置允许任何人执行。

chmod +x 文件路径

7.在容器运行时,将容器导出成镜像。

docker save f2178fed85e4 -o D:\arm_node.tar

注:f2178fed85e4为docker镜像id,在docker desktop的images镜像列表上,不要点copu,鼠标移动上去复制。

8.停止容器,删除容器,删除镜像。

docker stop my_container
docker rm c0420893e76d
docker rmi 1678ce6ee5f6

注:1678ce6ee5f6为镜像id或REPOSITORY。

9.导入搭建好环境时的镜像。

docker load < image.tar
#例如输出结果如下
63ca1fbb43ae: Loading layer [==================================================>]  8.082MB/8.082MB
b79dd9ce9c96: Loading layer [==================================================>]  21.83MB/21.83MB
5e2decf062d9: Loading layer [==================================================>]  4.608kB/4.608kB
940172648c6a: Loading layer [==================================================>]  173.6MB/173.6MB
Loaded image ID: sha256:def2de5a9550d90c34a421bea490a0e5e7467b25a496945183ff25fb9006a833

10.如需将容器内文件映射至宿主机,初次映射挂载时需在容器运行前,将容器内需要映射的文件目录内的文件完整的拷入将要映射的宿主机目录内。

注:这样做是因为docker在初次将容器与宿主机进行文件夹挂载时是以宿主机的文件夹为准的,此时如果宿主机的文件夹为空,那么在容器启动后会将宿主机空的文件夹覆盖至容器内的文件夹,之后在容器运行过程中容器映射文件夹内新增或删除的文件将实时与宿主机文件夹同步。故在初次映射挂载文件时需将容器内文件夹的文件完整拷入宿主机映射文件夹内。

11.通过该镜像运行容器,运行容器时一定要设置端口映射、文件目录映射

端口映射:将容器内运行的项目监听的端口映射至宿主机,这样才能够通过宿主机IP+端口方式直接访问容器内项目。

文件目录映射:将容器内在项目运行时经常需要变动的文件内容映射至宿主机指定的文件夹,例如数据库文件夹、项目资源文件夹、项目配置文件夹等都需要映射至宿主机文件夹,这样被映射的文件夹数据都不会随着容器重启、停止运行而被清空。

注:mysql数据库文件夹一般默认位于/var/lib/mysql

docker run \
  --name your_container_name \
  -p 2222:2222 \
  -v /文件夹:/var \
  --privileged \
  --security-opt apparmor=unconfined \
  --security-opt seccomp=unconfined \
  -dit \
  your_image_name \
  /usr/sbin/init

--name your_container_name: 给容器指定一个名字,将your_container_name替换为你想要的名字。

-p 2222:2222: 将容器的2222端口映射到宿主机的2222端口。

-v /文件夹:/var: 将宿主机上的/文件夹目录挂载到容器内的/var目录,互相都能看到彼此的文件。该操作不会覆盖或影响容器内重要的/var数据。

--privileged: 给予容器扩展的权限,允许它访问所有的设备等。

--security-opt apparmor=unconfined: 禁用AppArmor配置文件。

--security-opt seccomp=unconfined: 禁用seccomp默认的安全策略。

-dit:容器启动后会立即进入后台运行。

your_image_name: 替换为你要使用的镜像名称。

/usr/sbin/init: 指定容器启动时运行的命令,这里是指使用init进程作为入口点。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
  • 1
    1. 支付宝打赏

      qrcode alipay
    2. 微信打赏

      qrcode weixin

评论区