文章目录
一、使用 Dockerfile 构建镜像
Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
- 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
- 对于运维人员:在部署时,可以实现应用的无缝移植。
1.1 常用命令
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key=value | 设置环境变量 (可以写多条) |
RUN command | 是 Dockerfile 的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和 ADD 相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
CMD [“executable”, “param1”, “param2”…] | 容器启动时执行的操作 |
更多命令参考官方文档:传送门
1.2 使用脚本创建镜像
步骤:
-
创建目录:
mkdir –p /usr/local/dockerdjango
-
创建文件Dockerfile:
vim Dockerfile # 名字必须为 Dockerfile 或 dockerfile
-
写入命令:
# 依赖镜像名称和标签 FROM python:3.6 # 指定镜像创建者信息 MAINTAINER hugh # 复制文件 ADD ./requirement.txt /home/ # 执行命令 RUN pip install -r /home/requirement.txt -i 指定pip源 RUN mkdir /usr/local/django_pro # 指定工作目录 WORKDIR ~/project_pro CMD ["uwsgi","--ini","/home/django_pro/uwsgi.ini"]
-
执行命令构建镜像:
docker build -t='镜像名称:标签' . # 注意后边的空格和点
-
查看镜像是否建立完成:
docker images
二、上传镜像到 Docker Hub
步骤如下:
-
登录到 Docker Hub,执行以下命令:
docker login
然后输入用户名和密码,没有账户的,就通过浏览器注册一个。
-
给镜像打上标签:
必须规范镜像名称为”docker hub用户名/镜像名称“。
docker tag 镜像名称或ID:标签 用户名/镜像名称:标签
-
推送到远程仓库:
docker push 用户名/镜像名称:标签
三、搭建私有仓库
步骤如下:
-
拉取私有仓库镜像:
docker pull registry
-
配置仓库地址:
vim /etc/docker/daemon.json
修改为自己的 ip 地址后保存退出:
"insecure-registries": ["IP 地址:5000"]
-
重启 docker:
systemctl restart docker
-
启动容器:
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2
Registry 服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。
-
浏览器访问:
http://ip 地址:5000/v2/_catalog
-
打标签,使其指向我们的注册表:
docker tag 镜像名称或id ip地址:5000/myfirstimage
-
推送镜像:
docker push ip地址:5000/myfirstimage
四、docker compose 的安装和使用
Docker Compose 是一个用来定义和运行复杂应用的Docker工具。一个使用Docker 容器的应用,通常由多个容器组成。使用 Docker Compose 能更加方便地管理这些容器应用。
Docker Compose 通过一个配置文件来管理多个 Docker 容器,在配置文件中,所有的容器通过 service 来定义,然后使用 docker-compose 脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
4.1 Ubuntu 安装 docker compose
-
安装:
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
-
验证安装:
docker-compose -v
4.2 使用示例
通过 docker-compose 构建一个在 docker 中运行的基于 python flask 框架的web应用,同时使用 redis 数据库。
**注意:**确保你已经安装了 Docker Engine,但不需要安装 Python 或Redis,因为这两个都是由 Docker 镜像提供的。
步骤:
-
创建工程目录,结构如下:
└── compose_test ├── docker │ └── docker-compose.yml ├── Dockerfile └── src ├── app.py └── requirements.txt
-
在compose_test/src/目录下创建 python flask 应用,文件名为 app.py:
from flask import Flask from redis import Redis app = Flask(__name__) redis = Redis(host='redis', port=6379) @app.route('/') def hello(): count = redis.incr('hits') return 'Hello World! I have been seen {} times.\n'.format(count) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
-
创建 python 依赖文件 compose_test/src/requirements.txt:
flask redis
-
创建容器的 Dockerfile 文件:
FROM python:3.9 COPY src/ /opt/src WORKDIR /opt/src RUN pip install -r requirements.txt CMD ["python", "app.py"]
-
在compose_test/docker/目录下定义 docker-compose 脚本,文件名为 docker-compose.yml:
version: '3' services: web: build: ../ ports: - "5000:5000" volumes: - ../src:/opt/src redis: image: redis:3.0.7
这个compose文件定义了两个服务,即定义了web和redis两个容器:
- web 容器:
- 使用当前 docker-compose.yml 文件所在目录的上级目录(compose_test/Dockerfile)中的 Dockerfile 构建映像。
- 将容器上的5000端口映射到主机上的5000端口。
- 将主机上的项目目录 compose_test/src 挂载到容器中的 /opt/src 目录。
- redis 容器:
- 使用从 Docker Hub 提取的官方 redis 镜像3.0.7版本。
- web 容器:
-
使用 Compose 构建并运行应用程序:
docker-compose up # 若不使用默认的 docker-compose.yml 文件名,则需要 -f 参数指定: # docker-compose -f 文件名.yml up -d
然后在浏览器中输入 http://0.0.0.0:5000/ 查看运行的应用程序。
-
常用配置参数:
- version:指定 Docker Compose 文件的版本号。
- services:定义多个服务并配置启动参数。
- volumes:声明或创建在多个服务中共同使用的数据卷对象。
- networks:定义在多个服务中共同使用的网络对象。
- configs:声明将在本服务中要使用的一些配置文件。
- secrets:声明将在本服务中要使用的一些秘钥、密码文件。
- x-***:自定义配置,主要用于复用相同的配置。
-
常用命令:
docker-compose up # 会自动搜索当前路径下的 docker-compose.yml文件 docker-compose -f 指定文件 up docker-compose up -d # 后台执行,一般我们看日志输出,不用这个 docker-compose stop # 停止,不会删除容器和镜像 docker-compose down # 停止,并删除关联的容器 docker-compose start # 启动yml文件管理的容器 docker-compose ps # 正在运行的容器 docker-compose images # docker-compose管理的容器 docker-compose exec yml文件中写的service /bin/bash # 进入到容器内
更多配置项参考官方文档:传送门