文章

Docker使用备忘

这里记录在学习以及使用Docker时的一些点,用到的Linux版本为Debian10

安装

打开Docker官方文档并找到Install指引页面,选中自己正在使用的系统,按照指引进行安装即可

指南中的步骤,依次介绍了如何卸载旧版本的Docker,如何安装Docker(使用推荐的通过repository的安装方式,或者在没有外网的环境时通过安装包进行安装),这里需要注意的事,如果服务器不具备相关网络条件,可以使用阿里云镜像地址:https://mirrors.aliyun.com,或者直接使用适用于国内环境的安装脚本:

1
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

安装完成后可以按照官方文档,试着运行sudo docker run hello-world测试是否是否正确安装,这个命令检测到本地还没有hello-world这个镜像,就会去拉取这个镜像到本地,拉取并成功运行后,可以通过docker images命令,查看当前已经安装的所有镜像

卸载

在官方文档中也有提及,使用:sudo apt-get purge docker-ce docker-ce-cli containerd.io,注意,执行命令之后,宿主机上的镜像,容器,挂载卷,还有一些自定义配置信息不会被自动删除,如果想要删除它们,可以使用:

1
2
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

配置国内镜像加速服务

  1. 如果没有文件夹etc/docker,则先创建它
  2. 在该文件夹中的deamon.json文件中(若无则创建),添加registry-mirrors字段的内容,该字段是一个字符串数组,可以在其中添加多个加速镜像源,以便docker在源不可用时,自动切换到可用的源,这里可以用命令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     sudo tee /etc/docker/daemon.json <<-'EOF'
     {
         "registry-mirrors":[
             "https://docker.mirrors.ustc.edu.cn/",
             "https://hub-mirror.c.163.com/",
             "https://reg-mirror.qiniu.com"
             ]
     }
     EOF
    
  3. 编辑完并保存之后,重启服务即可:
    1
    2
    
     $ sudo systemctl daemon-reload
     $ sudo systemctl restart docker
    

Docker的常用命令

1
2
3
docker version # 显示docker的版本信息
docker info # docker的运行信息,包括`Containers`和`Images`的数量
docker <command> --help # 帮助命令

镜像命令

docker images:查看本地镜像

docker search:搜索镜像

docker pull:拉取镜像

docker rmi mysql:删除本地镜像

容器命令

运行容器

1
2
3
4
5
6
7
8
9
10
docker run
# 可选参数
--name # 容器名,用来区分容器
-d 后台方式运行 # 后台运行是有前提的,如果运行之后没有前台进程,容器就会自动退出,所以需要使用一些阻塞挂起命令启动容器,或者使用交互方式运行后再不停止并退出容器
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
-P 随机指定容器端口
--rm 在容器停止后自动删除容器以及其挂载的相关匿名卷 # 用于测试的情况比较多
-v 将容器内的目录挂载到宿主机上的目录(在挂载时指定的容器目录后可以加:ro或者:rw,指定在容器内文件的独写权限)
--volumes-from 同步容器之间的数据(eg: docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7)

列出容器

1
2
3
4
5
docker ps
# 可选参数
-a # 列出当前正在运行的容器 + 历史运行过的容器
-n=<数量> # 显示最近创建的指定数量个容器
-q # 只显示容器的编号

退出容器

exit:停止并退出容器 Ctrl + P + Q:不停止并退出容器

删除容器

1
2
3
docker rm <容器ID>
docker rm -f $(docker ps -aq) # 强制删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器

启动和停止容器的操作

1
2
3
4
docker start <容器ID> # 启动一个容器
docker restart <容器ID> # 重启一个容器
docker stop <容器ID> # 停止一个容器
docker kill <容器ID> # 强制停止一个容器

查看容器中的进程信息

1
docker top <容器ID>

查看容器的元数据

1
docker inspect <容器ID>

进入当前正在运行的容器

1
docker exec -it <容器ID> /bin/bash
1
docker attach <容器ID>

其他命令

拷贝命令(从容器内拷贝到主机上)

1
docker cp <容器ID>:<文件路径> <目标文件夹>

查看运行中容器的资源占用情况

1
docker stats

运行Portainer可视化面板

1
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

基于现有容器的改动创建新的镜像

1
docker commit -a"<author>" -m"<message>" <容器ID> <新镜像名称>

DockerFile

用途:用来构建docker镜像的文件

指令

FROM # 基础镜像
MAINTAINER # 镜像维护者信息
RUN # 构建镜像时需要运行的命令
ADD # 添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载目录
EXPOSE # 暴露端口
CMD # 指定容器启动时要运行的命令,只有最后一个会生效
ENTRYPOINT # 指定容器启动时要运行的命令,可以在命令后进行追加
ONBUILD # 构建时要执行的指令
COPY # 类似ADD命令,将文件拷贝到镜像中
ENV # 构建的时候设置环境变量

通过Dockerfile构建镜像

docker build -f <Dockerfile路径> -t <镜像名>:<tag> <PATH>

查看Docker镜像的构建步骤

docker history <ImageId>

本文由作者按照 CC BY 4.0 进行授权