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:   # 自定义网络名