Skip to content

Docker 入门到实战

字数
1686 字
阅读时间
8 分钟

基础

1. Docker架构与容器化

shell
# docker基础命令
# 下载镜像
docker pull dockername

# 运行镜像
docker run dockername

# 构建镜像
docker build dockername

# 推送镜像
docker push dockername

容器的特点: 容器类似轻量级VM 容器共享操作系统内核 容器拥有自己的文件系统、CPU、内存、进程空间等 容器间相互隔离

容器的优势: 轻量 快速 隔离 跨平台 高密度等

命令

下载镜像

shell
# 检索镜像
docker search imagesname

# 下载镜像
docker pull inamgesname

# 查看本地镜像列表
docker images

# 删除本地指定镜像
docker rmi imagesname / imagesnameID

容器的基本操作

shell
# 运行指定容器
docker run imagesname:tage

# 查看正在运行的容器
docker ps

# 查看所有运行中/已终止的容器
docker ps -a

# 停止指定容器
docker stop containerID

# 启动容器
docker start containerID

# 重启容器 
docker start containerID

# 查看容器运行状态(内存/CPU/硬盘等)
docker stats containerID

# 查看容器日志 
docker logs containerID

# 进入容器
docker exec containerID

# 删除容器(已停止)
docker rm containerID

# 强制删除运行中容器
docker rm -f containerID

docker run 的进阶操作

shell
# docker run 命令的使用(后台运行及指定容器名称)
docker run -d --name name imagesname:last
	-d : 后台启动
	--name name : 指定容器名称为name

# docker run 命令的使用(端口映射)
docker run -p 宿主机端口:容器端口 imagesname:last
	-p 宿主机端口:容器端口 : 端口映射

# docker run 命令的使用(后台运行 指定容器名称 指定端口映射)
docker run -d --name name -p 宿主机端口:容器端口 imagesname:last

docker exec 的进阶操作(进入容器内操作)

shell
# 进入运行中容器终端(可以使用容器名或者容器id连接)
docker exec -it containerID /bin/bash
	-it : 交互模式连接

保存/分享镜像

shell
# 提交(可以使用容器id 或者容器名称)
docker commit containerID 镜像名称:tage

# 保存为镜像压缩包
docker save 镜像名称:tage

# 加载(别人分享的镜像压缩包文件)
docker load zipname

# 分享社区(登录社区)
docker login 

# 命名镜像
docker tag

# 推送镜像到社区
docker push imagesname

储存

目录挂载(宿主机映射到容器)

shell
# 宿主机文件夹挂载到容器文件夹
docker run -d -p 80:80 -v 宿主机文件及:容器文件夹 imangesname:tar
    -d: 后台运行
    -p 80:80 :宿主机80端口映射到容器80端口
    -v 宿主机文件夹:容器文件夹 : 宿主机文件夹挂载到容器内文件夹

卷映射(容器映射到宿主机)

shell
docker run -d -p 80:80 -v 卷名:容器文件夹 --name name imagesname:tar
	-d : 后台运行
	-p 80:80: 端口映射
	-v 卷名:容器文件夹: 卷映射 (映射文件统一在宿主机: /var/lib/docker/volumes/卷名)
	--name name : 容器命名


# 列出所有的卷
docker volume ls

# 创建一个卷
docker volume create 卷名

# 查看卷详情
docker volume inspect 卷名

网络

shell
# 查看docker容器本机网络
docker inspect dockername

docker为每个容器分配唯一ip, 在同一宿主机内, 使用 容器ip + 容器内端口 就可以相互访问

shell
# 创建docker自定义网络
docker network create 网络名称

# 查看docker网络
docker network ls

# 使用docker自定义网络 
docker run -d -p 80:80 --name name --network 网络名称 --restart always imagesname
	-d : 后台运行
	-p 80:80 : 宿主机端口80 映射到 容器端口 80
	--neme name : 容器命名为 name
	--network 网络名称: 将容器加入自定义网络
	--restart always : 设置容器宿主机开机自启

# 同一自定义网络下容器的相互访问.
容器名:端口号

# 删除自定义网络
docker network rm 网络名称

Redis主从同步集群(后期查看)

15. 网络 - Redis主从集群_哔哩哔哩_bilibili

最佳实践(容器启动命令的构成)

shell
docker run -d \
-p 端口映射 \
-v 文件映射/卷挂载 \
-e 环境变量 \
--network 自定义网络 \
--name 自定义容器名称 \
--restart always 设置开机自启 \
imagesname:tar

Docker Compose(批量管理容器)

shell
# 批量上线容器(以后台运行的方式, 第一次)
docker compose up -d

# 批量下线容器
docker compose down

# 批量启动compose.yaml 内应用( 使用 docker compose up -d 命令已经启动过)
docker compose start 容器1 容器2 容器3...

# 批量停止应用
docker compose stop 容器1 容器2 ...

# 对指定容器扩容( 将容器x 启动三份)
docker compose scale 容器x=3

编写compose.yaml 文件批量启动容器

yaml文件的编写要素: 顶级元素 name 容器名称 services 服务 networks 网络 volumes 卷 configs 配置 secrets 密钥

shell
# 应用名称(此处以启动WordPress+mysql容器为例)
name:myblog

# 服务
services:
	mysql:                        # 服务名称
		container_name:mysql      # 容器名称
		image: mysql:8.0          # 镜像名称
		ports:                    # 网络端口
			- "3306:3306"
		environment:              # 环境变量
			- MYSQL_ROOT_PASSWORD=123456
		volumes:                  # 卷映射
			- mysql-data:/var/lib/mysql
		restart:always            # 开机自启
		networks:                 # 指定容器网络
			- blog
		depends_on:               # 镜像依赖容器
			- 依赖容器名

	镜像2:


# 如果存在容器卷映射, 则需要声明
volumes:
	mysql-data:

# 如果容器存在单独网络, 则需要声明
networks:
	blog:

compose.yaml文件的使用

shell
# 以后台方式启动compose.yaml文件内容器
docker compose -f compose.yaml up -d 
	-f compose.yaml : 指定yaml文件

# 批量停止compose.yanl 文件内容器
docker compose -f compose.yaml down

# 增量更新compose.yaml内的容器
修改compose.yaml文件内的内容, 重启启动即可

dockerfile(掌握构建自定义镜像)

常见指令作用
FROM指定镜像基础环境
RUN运行自定义命令
CMD容器启动命令或参数
LABEL自定义标签
EXPOSE指定暴露端口
ENV环境变量
ADD添加文件到镜像
COPY复制文件到镜像
ENTRYPOINT容器固定启动命令
VOLUME数据卷
USER指定用户和用户组
WORKDIR指定默认工作目录
ARG指定构建参数
shell
# dockerfile文件的使用
docker build -f dockerfile -t 指定生成镜像名称:tar .

docker镜像分层构建机制

贡献者

文件历史

撰写