docker学习笔记
- 0. docker 基本命令
- 1. docker存储
- 1.1 目录挂载
- 1.2 卷映射
- 2. docker 网络
- 2.1 机器ip访问
- 2.2 容器ip访问
- 2.3 域名访问
- 3. docker compose(批量管理)
- 3.1 编写一个`yml`文件:
- 3.2 docker compose 命令
- 4. 制作docker 镜像
0. docker 基本命令
docker
常用命令:(配合[option]
使用)
图片来源: b站docer教程
1. docker存储
1.1 目录挂载
- 容器内部数据管理不方便
- 存储容器数据(容器有自己的文件系统,容器删除的时候也一起被删除,但是挂载的文件夹还存在)
docker run -d -p:88:80 -v app/example:usr/share/html [docker_image] --name app01
-d : 后台启动
-p: 端口映射
-v: 目录挂载
外部文件夹app/example/
挂载在了容器内部usr/share/html
(初始化内容以外部为准)。
1.2 卷映射
目录挂载初始化的时候以外部的为准,在需要修改配置文件的时候,如果使用目录挂载,除非已经提前在外部放好了配置文件,那么容器内部的默认配置文件和外部的一样为空。
所以需要使用卷映射(初始化内容以内部为准),docker
的卷默认在/var/lib/docker/volumes/
下:
docker run -v 卷名:要映射的位置
这个命令会自动在/var/lib/docker/volumes/
下创建一个卷名
.
也可以手动创建volume
:
docker volume create volume-name // 创建volume(也在默认目录下)
docker volume ls // 查看
docker volume inspect volume-name // 查看卷详情
2. docker 网络
2.1 机器ip访问
docker容器
之间相互访问可以通过外部机器的ip:port
。- 缺点:需要通过外部机器的
ip
- 缺点:需要通过外部机器的
2.2 容器ip访问
docker0
给每个容器
分配同个网关
下的唯一ip
:可以使用inspect
命令获取:docker container inspect container-name : 查看容器详情
- 然后使用局域网进行访问。(此时使用
docker container
的port
)- 缺点:
ip
有可能重新分配等会带来变化。
- 缺点:
2.3 域名访问
docker0
默认不支持主机域名。- 创建自定义网络,
容器名
就是稳定的域名:
docker network create mynet // 创建一个自定义网络
docker network ls // 查看网络
# docker run 的时候添加自定义网络
docker -d -p 88:80 --network mynet --name app01
此时查看容器信息,已经有了DNS域名:
使用container-name
当作域名
进行访问。
3. docker compose(批量管理)
docker compose 可以进行批量管理和增量更新
3.1 编写一个yml
文件:
官方文档
name: my_project
services:
web:
image: nginx:latest
ports:
- "8080:80" # 将容器的 80 端口映射到主机的 8080 端口
volumes:
- web_data:/usr/share/nginx/html # 将名为 web_data 的卷挂载到容器中
networks:
- my_network # 将服务连接到名为 my_network 的网络
depends_on:
- db # 依赖于 db,先启动 db
restart: always # 总是重启
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example # 设置 MySQL root 用户的密码
MYSQL_DATABASE: mydatabase # 创建一个名为 mydatabase 的数据库
ports:
- "3306:3306" # 将容器的 3306 端口映射到主机的 3306 端口
volumes:
- db_data:/var/lib/mysql # 将名为 db_data 的卷挂载到 MySQL 数据目录
networks:
- my_network # 将服务连接到名为 my_network 的网络
restart: always # 总是重启
volumes:
web_data: # 定义一个名为 web_data 的卷
db_data: # 定义一个名为 db_data 的卷
networks:
my_network: # 定义一个名为 my_network 的自定义网络
3.2 docker compose 命令
- 启动:(下载并创建然后运行容器)
docker compose up -d # 文件名是 compose.yml -d:后台启动
docker compose -f file.yml up -d # 文件名为 file
- 下线(移除所有容器和网络,默认保留卷)
docker compose down # 文件名是 compose.yml
docker compose -f file.yml down # 文件名为 file
docker compose -f file.yml down -v # -v:删除卷 --rmi 指定删除的镜像
其他的--help
看下。
4. 制作docker 镜像
官方文档链接