Docker命令
帮助命令
# 查看docker概要信息
docker info
# 查看docker帮助文档
docker --help
# 查看docker命令文档
docker 命令 --help
镜像命令
Images
# 列出本地主机镜像
docker images
-a : 列出所有docker镜像
-q : 只展示镜像ID
# 搜索本机镜像(如果没有搜索仓库镜像)
docker search 镜像名字
--limit 5 : 显示前5个
# 拉取镜像
docker pull 镜像名字:TAG版本(默认最新)
# 查看镜像/容器/数据卷所占空间
docker system df
# 删除镜像
docker rmi 镜像ID/镜像名称:版本号
-f : 强制删除
$(docker images -qa) : 删除所有
# 更改镜像名并复制一份
docker tag 原镜像名:版本 新镜像名:版本
# 删除无用镜像
docker image prune
-a : 删除所有无用镜像
-f : 强制删除
虚悬镜像 : 仓库名,标签都是none
容器命令
Container
# 新建以及启动容器
docker run 参数 镜像名称 命令 其他
参数
--name="容器新名字" : 指定名称
-d : 后台运行容器
-i : 交互模式运行(与-t使用)
-t : 重新分配终端
-p : 指定映射端口
-P : 随机映射端口
-v : 容器数据卷
镜像名称:版本号
命令
/bin/bash : shell版本
# 列出所有运行的容器
docker ps
-a : 显示所有容器
-l : 显示最近创建的容器
-n : 显示当前运行的容器
-q : 只显示容器ID
# 启动容器
docker start
# 重启容器
docker restart
# 停止容器
docker stop
# 暂停容器
docker pause 容器名
# 恢复暂停的容器
docker unpause 容器名
# 强制停止容器
docker kill
# 清除所有停止的容器
docker container prune
# 删除已经停止的容器
docker rm 命令 容器id
-f : 强制删除
-l : 删除容器的连接
-v : 删除容器挂载的数据卷
# 查看容器日志
docker logs 容器id
# 查看容器内运行的进程
docker top 容器id
# 容器内部细节
docker inspect 容器id
# 查看容器端口映射
docker port 容器id
# 重新进入容器(exit不会停止容器)
docker exec -it 容器id 命令
# 重新进入容器(exit会停止)
docker attach 容器id 命令
# 拷贝文件到主机
docker cp 容器ID:容器内路径 要拷贝到主机的路径
# 导出容器镜像到主机目录
docker export 容器ID > 文件名
# 导入镜像到docker
cat 镜像.tar | docker import - 镜像用户/镜像名:镜像版本号
# 提交镜像
docker commit -m="描述信息" -a="作者" 容器ID 创建的镜像名:版本号
# 容器内操作
exit : 退出容器(停止)
ctrl+p+q : 退出容器(不停止)
网络详解
网络模式
# 虚拟网桥,每一个容器连接到docker0(默认)
bridge
# 使用苏主机的ip和端口
host
# 容器有独立的network namespace
none
# 新创建的容器和指定容器恭喜那个ip
container
常用命令
# 查看docker网络模式命令
docker network ls
# 创建新的网络连接
docker network create 网络名
# 删除网络连接
docker network rm 网络名
# 查看网络连接信息
docker network inspect 网络名
# 设置容器网络模式
docker run --network 网络名
数据卷
# 映射数据卷
docker run -it --privileged=true -v /宿主机绝对路径:/容器内路径:rw/ro --name='镜像名' 镜像ID/镜像名
# 容器卷继承
docker run -it --privileged=true --volumes-from 父类 --name='镜像名' 镜像ID/镜像名
容器构建
Dockerfile实例
- 文件名为
Dockerfile
# 基于哪个镜像:版本
FROM centos:7.9
# 为镜像指定标签可以多个(换行用\)
LABEL cc.anon.name="anon" \
cc.anon.data="20111111"
# 配置工作目录
WORKDIR /usr/local
# 复制宿主机的demo.py到工作目录下的test.py
ADD /demo.py /test.py
# 复制files文件夹下的所有文件到文件夹
ADD /files /usr/local/files
# 下载文件至工作目录下的file文件夹
ADD https://anon.cc/demo.py /file/
# 复制并解压文件到file文件夹里面
ADD file.gz.tar /file/
# 同ADD用法一样(不能解压/只能复制本地路径)
COPY file /usr/local/file
# 声明容器暴露端口
EXPOSE 8080
# 挂载匿名卷
VOLUME /var/log
# 设置变量info
ENV info="/usr/local"
# 运行命令(加-y) 构建时运行
RUN yum install vim -y
# 可执行文件加参数 容器启动后运行
CMD ["echo","$PATH"]
容器编排
docker-compose实例
- 文件名为
docker-compose.yml
version: "3.9" # 配置版本号
services: # 表示服务
# 服务名
rept:
# 定义基础镜像
image: ubuntu:22.04
# 容器名
container_name: rept_01
# 宿主机和容器映射端口
ports:
- "8080:8080"
# 数据卷映射
volumes:
- /data/log:/usr/local/mysql/log
# 自定义容器网络
networks:
- anon_net
#依赖的服务
depends_on:
- redis
- mysql
# 服务名
redis:
# 定义基础镜像
image: redis:6.0.8
# 宿主机和容器映射端口
ports:
- "6379:6379"
# 数据卷映射
volumes:
- /data/redis/log:/etc/redis/redis.conf
# 自定义容器网络
networks:
- anon_net
# 容器启动后运行的命令
command: redis-server /etc/redis/redis.conf
# 服务名
mysql:
# 定义基础镜像
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '142857'
# 宿主机和容器映射端口
ports:
- "3306:3306"
# 数据卷映射
volumes:
- /data/mysql/log:/var/lib/mysql
# 自定义容器网络
networks:
- anon_net
# 容器启动后运行的命令
command: --default-authentication-plugin=mysql-native_password
networks: # 创建自定义网络
anon_net: # 自定义网络名