文章目录
- Docker启动和校验
- 镜像和容器
- 常见命令
- 存储
- 目录挂载
- 卷映射
- 数据卷命令
- 网络
- 网络命令
- 自定义网络实现redis主从同步集群
- DockerCompose
- 语法
Docker启动和校验
# 启动Docker
systemctl start docker# 查看Docker运行状态
systemctl status docker# 停止Docker
systemctl stop docker# 重启
systemctl restart docker# 设置开机自启
systemctl enable docker# 通过运行一个简单的 Docker 容器来验证安装是否成功:
sudo docker run hello-world
镜像和容器
镜像(image) 包含了运行所需要的环境、配置、系统级函数库。
容器(container) 运行时有自己独立的环境,可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器。
Docker官方提供了一些基础镜像,然后各大软件公司又在基础镜像基础上,制作了自家软件的镜像,全部都存放在这个网站。Docker镜像仓库
Docker的官方文档
常见命令
注意: 可以在所有的命令后面加个 --help 获取详细用法
镜像命令 | 说明 |
---|---|
docker search | 查看镜像 |
docker pull | 拉取镜像 |
docker images | 查看本地镜像 |
docker rmi | 删除本地镜像 |
docker commit | 提交本地镜像 |
docker save | 保存镜像到本地压缩文件 |
docker load | 加载本地压缩文件到镜像 |
docker push | 推送镜像到DockerRegistry |
容器命令 | 说明 |
---|---|
docker run | 创建并运行容器(不能重复创建) |
docker stop | 停止指定容器 |
docker start | 启动指定容器 |
docker restart | 重新启动容器 |
docker rm -f | 删除指定容器 |
docker ps -a | 查看所有容器 |
docker logs | 查看容器运行日志 |
docker exec -it | 进入容器 |
docker inspect | 查看容器详细信息 |
存储
以nginx为例进行目录挂载和卷映射
目录挂载
一切以本机挂载的目录为准,初始为空目录(不存在则自动创建) 双向绑定
本机挂载以 / 开头
docker run -d -p 80:80 \
-v /app/nghtml:/usr/share/nginx/html \
--name app \
nginx:1.26.0
# 一开始访问不到欢迎页面 因为本机 /app/nghtml 目录下没有文件
cd /app/nghtml
echo hello nginx > index.html
# 输入上述命令后可以看到页面显示 hello nginx# 进入容器内部验证双向绑定
docker exec -it app bash
cd /usr/share/nginx/html
echo hello world >> index.html
# 输入上述命令后可以看到页面显示 hello nginx hello world
卷映射
以本机的数据为准,初始同步容器内部的数据 双向绑定
卷映射不以 / 开头 直接写卷名就可以
数据卷默认放到 /var/lib/docker/volumes/目录下
docker run -d -p 80:80 \
-v /app/nghtml:/usr/share/nginx/html \
-v ngconf:/etc/nginx \
--name app1 \
nginx:1.26.0
cd /var/lib/docker/volumes/
# 可以看到目录下有ngconf文件夹
数据卷命令
命令 | 说明 |
---|---|
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据卷的详情 |
docker volume prune | 清除未使用的数据卷 |
注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建。
网络
如果在容器运行的时候没有指定网络,则自动加入docker0网络,“Gateway”: “172.17.0.1”
docker0网络 不能通过 容器名 + 端口的形式访问
网络命令
命令 | 说明 |
---|---|
docker network create | 创建一个网络 |
docker network ls | 查看所有网络 |
docker network rm | 删除指定网络 |
docker network prune | 清除未使用的网络 |
docker network connect | 使指定容器连接加入某网络 |
docker network disconnect | 使指定容器连接离开某网络 |
docker network inspect | 查看网络详细信息 |
自定义网络实现redis主从同步集群
# 1. 创建网络
docker network create redis# 2. 主机
docker run -d -p 6379:6379 \
-v /app/rd1:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=master \
-e REDIS_PASSWORD=123456 \
--network redis --name redis01 \
bitnami/redis# 3. 从机
docker run -d -p 6380:6379 \
-v /app/rd2:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=slave \
-e REDIS_MASTER_HOST=redis01 \
-e REDIS_MASTER_PORT_NUMBER=6379 \
-e REDIS_MASTER_PASSWORD=123456 \
-e REDIS_PASSWORD=123456 \
--network redis --name redis02 \
bitnami/redis# 一开始启动容器会报错,因为需要写入数据 但是没有权限
cd /app
chmod -R 777 rd1
chmod -R 777 rd2# 重启容器
docker restart redis01
docker restart redis02
DockerCompose
Docker Compose可以帮助我们实现多个相互关联的Docker容器的快速部署。
它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。
docker-compose.yml文件的参考文档
name: myblog
services:mysql:container_name: mysqlimage: mysql:8.0.32ports:- "3306:3306"environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpressvolumes:- mysql-data:/var/lib/mysql- /app/myconf:/etc/mysql/conf.drestart: alwaysnetworks:- blogwordpress:container_name: wordpressimage: wordpressports:- "10010:80"environment:WORDPRESS_DB_HOST: mysqlWORDPRESS_DB_USER: rootWORDPRESS_DB_PASSWORD: 123456WORDPRESS_DB_NAME: wordpressvolumes:- wordpress:/var/www/htmlrestart: alwaysnetworks:- blogdepends_on:- mysqlvolumes:mysql-data:wordpress:networks:blog:
# 启动wordpress
docker compose -f compose.yaml up -d
# 关闭wordpress 不删除挂载的数据 下次启动数据一样
docker compose -f compose.yaml down
# 关闭wordpress 删除挂载的数据 下次启动没有数据
docker compose -f compose.yaml down -v
语法
docker compose [OPTIONS] [COMMAND]
类型 | 参数或指令 | 说明 |
---|---|---|
Options | -f | 指定compose文件的路径和名称 |
-p | 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念 | |
Commands | up | 创建并启动所有service容器 |
down | 停止并移除所有容器、网络 | |
ps | 列出所有启动的容器 | |
logs | 查看指定容器的日志 | |
stop | 停止容器 | |
start | 启动容器 | |
restart | 重启容器 | |
top | 查看运行的进程 | |
exec | 在指定的运行中容器中执行命令 |