记录一次Docker镜像编排的过程
随着在生产环境下对Docker应用的复杂度的提高,手工运行 docker run
命令方式并不适应快速部署的需求,应用之间可能存在依赖关系,部分应用划分到一组网络中方便访问,为了保证安全期间也会要求和其他无关应用隔离等等。要达到这样的部署要求,有必要采用一些编排工具(比如 Docker-Compose)和编排脚本来完成。
对镜像进行编排,首先还是需要对镜像进行了解,比如我想创建一个mysql镜像,那镜像库在哪里,版本是什么,镜像有什么环境参数,需要挂接那些磁盘,甚至于初始化的时候是不是要执行什么脚本?下面是一段mysql的编排脚本
mysql:
build: ./mysql
ports:
- "4000:3306"
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/my.cnf:/etc/my.cnf
- ./mysql/scripts:/docker-entrypoint-initdb.d/
environment:
MYSQL_RANDOM_ROOT_PASSWORD : password-random
MYSQL_DATABASE: demodb
MYSQL_USER : demouser
MYSQL_PASSWORD : demopassword
networks:
- backend
restart: always
container_name: mysql_demoname
如想详细了解在Docker中部署mysql,可以参考:
创建私有镜像库存储的应用镜像相对而言就简单很多,并且由于应用从源码的编码,到镜像的制作都是内部完成,所以熟悉程度也高。比如我从Github上下载了一套 应用的源码,源码采用 dotnet core 2.2 进行开发,配置文件是 根目录下的 appsettings.json 。在创建镜像的时候,我参考了了解适用于 .NET Core 的 Docker 映像。根据这个方法制作的镜像,应用都部署在容器的 /app目录下,默认开启80端口。其编排脚本如下:
app1:
image: 114.100.96.50:5050/djm/app1:latest
ports:
- "5000:80"
volumes:
- ./app1/appsettings.json:/app/appsettings.json
114.100.96.150:5050 下是我搭建的私有镜像库。
我将宿主机目录下配置文件绑定到了容器中/app/appsettings.json,至少修改宿主机目录下文件就相当于修改了容器内的配置文件,这个功能感觉超赞。
晒晒编排脚本目录结构
├── docker-compose.yml
├── mysql
| ├── data ##存储mysql数据
| └── script ## 初始化SQL脚本
| └── Dockerfile
| └── my.cnf ## 配置文件
├── app1
| └── appsettings.json ## 应用配置文件
├── app2
| └── appsettings.json ## 应用配置文件
还有就是我参考的编排脚本地址:https://github.com/voocel/docker-lnmp