创建镜像
- 创建 Dockerfile 文件,无后缀名
- 创建镜像,同级目录下执行命令
docker build -t getting-started .
-t
标记了镜像,该镜像的名字为 getting-started
, .
表示在当前目录寻找 Dockerfile
。
运行容器
- 使用
docker run
命令
docker run -dp 3000:3000 getting-started
-d
- 后台运行容器-p 3000:3000
- 映射主机端口和容器内端口getting-started
- 使用的镜像
提交镜像
- 登陆 docker,
docker login -u YOUR-USER-NAME
- 使用
docker tag
命令重命名本地镜像,需要加上 docker 账户的名字
`docker tag getting-started YOUR-USER-NAME/getting-started - 提交镜像,执行命令
docker push YOUR-USER-NAME/getting-started
。
数据持久化
- 不同容器之间数据无法互相访问
- 每次重新部署容器,非公有数据会重置
- 映射公有目录实现数据共享
Named Volumes | Bind Mounts | |
---|---|---|
存储路径 | docker 自动选择 | 开发者控制 |
映射案例(using -v) | my-volume:/usr/local/data | /path/to/data:/usr/local/data |
Populates new volume with container contents | yes | no |
支持卷驱动程序 | yes | no |
路径挂载
将数据挂载到特定目录下
容器卷
docker volume create [name]
- 类似建立一个磁盘空间,挂载至容器
- 与路径挂载的区别在于非 root 用户无法从外部访问
- 好处是不需要关心数据存放位置,docker 会自行处理
复合应用
通过创建同一网络 docker network create [net name]
将两个不同的容器互联互通。
使用 docker compose
- 在项目目录下创建
docker-compose.yml
文件。 - 根据 run 时的信息配置镜像、命令、映射、环境变量等信息
- 使用
docker compose up -d
后台启动应用 - 使用
docker compose down
停止应用,如果需要删除卷,则需要添加--volumes
命令。
docker启动后添加端口映射
- 提交当前运行中的容器为新镜像
docker commit [containerid] [image-name]
- 运行镜像并添加添加端口
docker run -idp [new-port]:[port] [image-name] /bin/bash
参考文章
Q.E.D.