1. 帮助启动类命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker
docker info
docker --help
docker 具体命令 --help
|
2. 镜像命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| docker images [options] -a(列出本地所有镜像) -p(只显示镜像id)
docker images nginx
docker search xxx [options] --limit(限制镜像数量) docker search node --limit 5 (搜索前五条node镜像)
docker pull node (下载最新版本node) docker pull mysql:18.17.0 (下载指定版本node)
docker system df
docker rmi -f hello-world (根据镜像名称删除) docker rmi -f 9c7a54a9a43c (根据镜像id删除) docker rmi -f 9c7a54a9a43c d9ad63743e72 (删除多个镜像) docker rmi -f ${docker images -qa} (删除所有镜像)
|
3. 容器命令
3.1 新建并运行容器
1 2
| # 命令格式 docker run [options] images [command] [arg...]
|
常用参数
参数 |
说明 |
–name |
为容器指定一个名称 |
-d |
后台运行容器并返回容器 ID |
-i |
以交互模式运行容器,通常与-t 同时使用 |
-t |
分配一个终端,通常与-i 同时使用 |
-P |
随机端口映射 |
-p |
指定端口映射 |
参考实例
1 2 3 4 5
| # 新建并运行node容器 指定容器名称为docker-node 操作终端为bash docker run -it --name docker-node node:18.17.0 /bin/bash
# 新建并运行mysql容器 在后台默默运行 docker run -itd mysql
|
3.2 查看正在运行容器
1 2
| # 查看正在运行容器 docker ps [optongs]
|
常用参数
参数 |
说明 |
-a |
列出正在运行的容器 + 历史运行过的容器 |
-l |
显示最近创建过的容器 |
-n |
显示最近 n 个创建的容器 |
-q |
只显示容器编号 |
3.3 退出、停止、启动容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # 退出容器并关闭容器 exit
# 退出容器不关闭容器 按下ctrl + q + p
# 进入正在运行的容器 docker exec -it 9c7a54a9a43c /bin/bash (本质是打开一个新shell 再次使用exit退出时 容器不会停止) docker attach 9c7a54a9a43c (使用exit退出时 容器会停止)
# 启动以停止容器 docker start docker-node (容器名称或id)
# 重启容器 docker restart docker-node (容器名称或id)
# 停止容器 docker stop docker-node (容器名称或id)
# 强制停止容器 docker kill docker-node (容器名称或id)
|
3.4 删除容器
1 2 3 4 5 6 7 8
| # 删除已停止容器 docker rm docker-node (容器名称或id)
# 删除运行中容器 docker rm -f docker-node (容器名称或id)
# 删除所有容器 docker rm -f ${docker ps -aq}
|
3.5 其他命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # 查看容器运行日志 docker log 9c7a54a9a43c (容器id)
# 查看容器内运行进程 docker top 9c7a54a9a43c (容器id)
# 查看容器内部细节 docker inspect 9c7a54a9a43c (容器id)
# 拷贝容器内的文件到主机 将容器内a.txt文件拷贝到主机 docker cp 9c7a54a9a43c:/tmp/a.txt /tmp/c.txt
# 导出容器 将指定容器导出为.tar文件 docker export ecb0f809e276 > node.tar
# 导入容器 将指定容器导出为.tar文件 cat [文件名].tar | docker import [镜像用户]/[镜像名]:[版本号] cat node.tar | docker import - zs/node:6.6
|
3.6 commit 命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 安装一个ubuntu镜像 docker pull ubuntu
# docker安装的ubuntu镜像是不带有vim命令的 假如我们日后的项目中都需要使用vim命令 # 那么每次使用一个新项目都需要安装一次vim 所以为了方便我们在原来的基础上构建一个含vim命令的新镜像
# 新建并启动ubuntu容器 安装vim命令 docker run -it ubuntu /bin/bash apt update apt -y install vim
# commit命令提交一个副本形成新镜像 docker commit -m="描述信息" -a=“作者” 容器ID 要创建的镜像名:[标签] docker commit -m="ubuntu-vim" -a=“aaa” 9ffcc080e573 ubuntu/vim:1.1
|
4. 本地镜像发布到阿里云镜像
1 2 3 4 5 6 7 8 9 10
| # 登录阿里云Docker Registry docker login --username=xxbsxy registry.cn-hangzhou.aliyuncs.com
# 从Registry中拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/cgdcgd/text_docker:[镜像版本号]
# 将镜像推送到Registry docker login --username=xxbsxy registry.cn-hangzhou.aliyuncs.com docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/cgdcgd/text_docker:[镜像版本号] docker push registry.cn-hangzhou.aliyuncs.com/cgdcgd/text_docker:[镜像版本号]
|
5. 容器卷
主要作用: 映射,将容器内的文件与主机内的文件关联,将容器内的数据备份 + 持久化到本地主机目录。即使删除容器,之前的数据不会丢失
5.1 Bind Mount 绑定(常用)
1 2 3 4 5 6
| # 添加容器卷 (--privileged=ture为开放root权限) docker run -it --privileged=true -v /宿主机绝对路径:/容器内路径 镜像名 docker run -it --privileged=true -v /tmp/host:/tmp/docker ubuntu
# 将容器内的设置为只读 默认为可读写rw ro为只读 docker run -it --privileged=true -v /tmp/host:/tmp/docker:ro ubuntu
|
5.2 具名绑定
具名绑定 当容器删除时或停止时容器卷不会删除
1 2 3
| # 添加容器卷 (--privileged=ture为开放root权限) docker run -it --privileged=true -v 容器卷名称:/容器内路径 镜像名 docker run -it --privileged=true -v ubuntu-volume:/tmp/docker ubuntu
|
5.3 匿名绑定
匿名绑定 当容器删除时容器卷也会删除
1 2 3
| # 添加容器卷 (--privileged=ture为开放root权限) docker run -it --privileged=true -v /容器内路径 镜像名 docker run -it --privileged=true -v /tmp/docker ubuntu
|
5.4 管理容器卷命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 查看容器卷相关命令 docker volume
# 查看所有容器卷 docker volume ls
# 查看单个容器卷 docker volume inspect [容器卷名称]
# 删除单个容器卷 docker volume rm [容器卷名称]
# 删除所有未使用容器卷 docker volume prune
|
6. Docker 网络
6.1 桥接模式
在主机中会创建一个 Docker0 的虚拟网桥,在 Docker0 创建一对虚拟网卡,有一半在主机上为 vethxxx,有一半在容器内为 eth0

6.2 Host 模式
容器不在拥有网络空间,而是与主机共享一个网络,ip 就是主机对应的子网

6.3 None 模式
容器与主机网络隔离,容器将不会被分配 ip、网卡等信息,与外部完全隔离
6.4 自定义网络模式(推荐)
通过 docker network create 命令可以创建自定义网络模式
1
| docker network create custom_network
|
6.5 常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 查看网络相关命令 docker network
# 查看所有网络模式 docker network ls
# 查看单个网络 docker network inspect [网络名称]
# 删除单个网络 docker network rm [网络名称]
# 删除所有未使用网络 docker network prune
# 连接网络 docker network connect 网络名称 容器名称
# 断开网络 docker network disconnect 网络名称 容器名称
|
7. DockerFile
7.1 常见命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| # 1.指定基础镜像 FROM openjdk:8
# 2.指定镜像作者(可选) MAINTAINER cgd<xxx.@163.com>
# 3.指定镜像描述信息(可选) LABEL version="1.0" LABEL xxx="xxx"
# 4.配置环境变量信息 ENV JAVA_EVN dev ENV APP_NAME dev
# 5.构建镜像时需要执行的shell脚本 RUN ls -al RUN mkadi /www/test
# 6.将主机的指定文件复制到容器的目标位置 ADD /etc/hosts /etc/hosts
# 7.设置容器中的工作目录,如果该目录不存在自动创建,并进入到该目录 WORKDIR /app # 打印的目录时 /app RUN pwd
# 8.绑定数据卷 将主机中的指定目录挂载到容器中 VOLUME /www/test/index.html
# 9.启动容器后要暴露的端口 并不会和主机关联 EXPOSE 8080/tcp
# 10.容器启动后默认执行的命令 CMD ENTRYPOINT选择其一 CMD ping 127.0.0.1 或者 ENTRYPOINT ping 127.0.0.1
# 11.设置动态值 ARG jdk=17 FROM openjdk:$jdk
# 12.设置操作用户 后续执行的命令由指定用户完成 USER test
|
7.2 SpringBoot 项目构建
- 编写 DockerFile 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 指定基础镜像 FROM openjdk:8
# 将项目拷贝到容器中 ADD *.jar app.jar
# 配置环境变量 ENV APP_OPES="" ENV JVM_OPTS="-Xms128m -Xmx128m"
# 暴露端口 EXPOSE 8888
# 设置启动时命令 ENTRYPOINT ["sh","-c","java $JVM_OPTS -jar /app.jar $APP_OPES" ]
|
- 构建镜像
1
| docker build -t springbot-docker:1.0.0 ./
|
- 构建容器
1
| docker run -d -p 8888:8888 springbot-docker:1.0.0
|
7.3 JavaWeb 项目构建
- 编写 DockerFile 文件
1 2 3 4 5 6 7
| FROM tomcat:9.0
WORKDIR /user/local/tomcat/webapps
ADD *.war ROOT.war
ENTRYPOINT ["sh","-c","../bin/catalina.sh run" ]
|
- 构建镜像
1
| docker build -t javaweb:1.0.0 ./
|
- 构建容器
1
| docker run -d javaweb:1.0.0
|
8. DockerCompose
8.1 基础使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| # 命令行运行 docker run -it -d -name mynginx --restart=always --net xxx -v /www/index.html:/user/index.html -e APP_ENV=dev -nginx
# 创建docker-compose.yml文件 # 指定版本 version: "2.1" services: nginx-demo: image: "nginx" restart: "always" networks: - net_demo volumes: - /www/index.html:/user/index.html environment: APP_ENV: dev ports - 80:80
networks: net_demo: driver: bridge ipam: driver: default config: - subnet: 192.168.3.40/16 # 指定子网 gateway: 192.168.3.254 # 指定网关
|
8.2 常见命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| # 判断docker-compose.yml语法和书写是否正确 docker-compose config [docker-compose.yml文件所在路径 当前路径则不用指定]
# 查看服务 docker-compose ps
# 创建yml文件中单个服务 docker-compose create nginx_demo
# 创建yml文件所有服务 docker-compose create
# 运行yml文件中单个服务 docker-compose up -d nginx_demo
# 运行yml文件所有服务 docker-compose up -d
# 运行多个相同服务 docker-compose scale nginx_demo=3
# 查看日志 docker-compose logs
# 停止 docker-compose stop nginx_demo
# 启动 docker-compose start nginx_demo
|
9. 可视化工具安装
1 2 3 4 5
| # 拉取portainer镜像 docker pull portainer/portainer-ce
# 启动镜像 docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /dockerData/portainer:/data --restart=always --name portainer portainer/portainer-ce:latest
|
10. 安装 Docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 安装前更新系统 sudo apt update # 安装 Docker 的依赖包 sudo apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates # 添加清华 Docker 镜像源 GPG 密钥 curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg # 添加清华 Docker 镜像源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list # 更新 apt 缓存 sudo apt update # 安装 Docker sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin # 查看docker版本 sudo docker version
|