三大概念
容器:容器是一个运行在隔离环境中的程序
镜像:镜像是只读的模板,包含了创建容器所需的所有文件和配置信息
仓库:仓库是用来存储、分发、管理镜像的地方
容器管理命令
命令 | 说明 |
---|---|
docker version | 查看服务器与客户端版本 |
docker info | 查看 docker 服务配置信息 |
docker images | 查看本机镜像 |
docker pull 镜像名称:标签 | 下载镜像 |
docker save 镜像名称:标签 -o 文件名 | 备份镜像为tar包 |
docker load -i 备份文件名称 | 导入备份的镜像文件 |
docker history 镜像名称:标签 | 查看镜像的制作历史 |
docker run -it(d) 镜像名称:标签 | 创建容器 |
docker ps | 查看容器的信息 |
docker inspect 镜像名称|容器名称 | 查询(容器/镜像)的详细信息 |
docker [start|stop|restart] 容器id | 启动、停止、重启容器 |
docker exec -it 容器ID 启动命令 | 在容器内执行命令 |
docker logs 容器ID | 查看容器日志 |
docker cp 路径1 路径2 | 拷贝文件:路径格式(本机路径、容器ID/路径) |
docker rm 容器ID | 删除容器 |
docker tag 镜像ID:标签 镜像名称:新的标签 | 创建新的镜像名称和标签 |
docker rmi 镜像名称:标签 | 删除镜像(必须先删除该镜像启动的所有容器) |
Dockerfile
commit 能制作简单的镜像,但复杂的情况十分不便,而 Dockerfile 是一种强大的镜像制作方式,通过编写类似脚本的 Dockerfile 文件制作镜像。
格式:docker build -t 镜像名称:标签 Dockerfile 所在目录
指令 | 说明 |
---|---|
FROM | 指定基础镜像(scratch 代表空镜像) |
RUN | 在容器内执行命令,可以写多条 |
ADD | 把文件拷贝到容器内,如果文件是 tar.xx 格式,会自动解压 |
COPY | 把文件拷贝到容器内,不会自动解压 |
ENV | 设置启动容器的环境变量 |
WORKDIR | 设置启动容器的默认工作目录(唯一) |
CMD | 容器默认的启动参数(唯一) |
ENTRYPOINT | 容器默认的启动命令(唯一) |
USER | 启动容器使用的用户(唯一) |
EXPOSE | 使用镜像创建的容器默认监听使用的端口号/协议 |
Docker 私有仓库 registry
私有仓库是存储 docker image 的仓库。
Registry 提供了仓库核心功能,包括分层传输机制、web接口等功能。
核心参数:
镜像仓库地址:"registry-mirrors": ["http://registry:5000", "其他镜像仓库"]
信任仓库地址:"insecure-registries":["registry:5000", "其他镜像仓库"]
在 Registry 仓库安装部署完成后,所有 docker 节点都需要配置:
[root@docker ~]# vim /etc/hosts
192.168.88.30 registry #配置域名解析服务
[root@docker ~]# vim /etc/docker/daemon.json # 修改配置文件
{
"registry-mirrors": ["http://registry:5000", "其他镜像仓库"],
"insecure-registries":["registry:5000"]
}
[root@docker ~]# systemctl restart docker #重启服务生效
[root@docker ~]# docker info #查看是否生效
上传镜像需要先设置标签,如下:
[root@docker ~]# docker tag rockylinux:8 registry:5000/img/mylinux:8.5
[root@docker ~]# docker push registry:5000/img/mylinux:8.5
查看镜像名称: curl http://仓库IP:5000/v2/_catalog
查看镜像标签: curl http://仓库IP:5000/v2/镜像路径/tags/list
使用易读格式: python3 -m json.tool
端口映射
格式:docker run -p 可选IP:宿主机端口:容器端口(可有多个)
docker run -itd --rm --name web -p 8080:80 myos:httpd
容器卷
Docker 可以映射宿主机文件或目录到容器中。目标对象不存在就自动创建,存在就直接覆盖,多个容器可以映射同一个目标对象来达到数据共享的目的。
格式:docker run -itd -v 宿主机对象:容器内对象 镜像名称:标签
docker run -itd --rm --name web -p 80:80 -v /var/webroot:/usr/local/nginx/html myos:nginx
容器间通信
模式:
bridge 默认模式
host 与宿主机共享网络
none 无网络模式
container 共享其他容器的网络命名空间
自定义网络
container:
格式:参数 --network=container:容器名称
docker run -itd --rm --name php --network=container:web myos:php-fpm
使用卷共享网络命名空间:
docker run -itd --rm --name php --network=container:web \
-v /var/webroot:/usr/local/nginx/html myos:php-fpm
微服务
不是技术而是架构思想,它以容器技术为载体,演进出一种以软件运行环境、产品、研发、运营为一体的全新模式。从 Docker 角度来说,软件就是容器的组合,而容器又是服务的最佳载体,一台计算机同时运行多个容器从而就能很轻松地实现复杂的架构。
Compose 是一个用于定义和运行多容器的应用工具。
创建项目文件:
[root@docker ~]# vim docker-compose.yaml
name: myweb #项目名称
version: "3" #语法格式版本
services: #关键字,定义服务
websvc: #服务名称
container_name: nginx #服务容器
image: myos:nginx #创建容器使用的镜像
compose子命令:
指令 | 说明 |
---|---|
up | 创建项目并启动容器 |
ls | 列出可以管理的项目 |
images | 列出项目使用的镜像 |
ps | 显示项目中容器的状态 |
logs | 查看下项目中容器的日志 |
start/stop/restart | 启动项目/停止项目/重启项目 |
down | 删除项目容器及网络 |
compose语法:
指令 | 说明 |
---|---|
container_name | 指定容器名称 |
image | 指定为镜像名称或镜像 ID |
ports | 暴露端口信息 |
volumes | 数据卷,支持 [volume、bind、tmpfs、npipe] |
network_mode | 设置网络模式 |
environment | 设置环境变量 |
restart | 容器保护策略[always、no、on-failure] |
command | 覆盖容器启动后默认执行的命令 |
healthcheck | 配置服务健康检测 |
depends_on | 服务依赖关系 services_[started、healthy、completed_successfully] |
容器服务编排:
[root@docker ~]# vim docker-compose.yaml
name: myweb
version: "3"
services:
websvc:
container_name: nginx
image: myos:nginx
ports: #端口绑定
- 80:80 #宿主机端口:容器端口
environment: #设置环境变量
- "TZ=Asia/Shanghai" #环境变量
volumes: #卷
- type: bind #卷类型
source: /root/conf/nginx.conf #宿主机路径
target: /usr/local/nginx/conf/nginx.conf #容器路径
- type: bind
source: /var/webroot
target: /usr/local/nginx/html
phpsvc: #服务名称
container_name: php #容器名称
image: myos:php-fpm #创建容器使用的镜像
restart: always #容器重启策略
network_mode: "service:websvc" #网络工作模式
volumes: #卷
- type: bind #卷类型
source: /var/webroot #宿主机路径
target: /usr/local/nginx/html #容器路径