在创建容器docker的过程中,如果单独使用docker命令操作会比较繁琐,如果把容器运用到生产环境,我们必须要把服务容器里面的配置文件,主目录路径,日志文件,端口全部映射出来,这边可以提供2种方法进行操作。
一.通过编写shell脚本来运行
shell脚本可以方便对单个节点容器的管理
1. docker_mysql的创建
vim docker_mysql.sh #!/bin/bash docker run -it -d -p 3306:3306 \ #设置主机端口和对应的映射端口 -e MYSQL_ROOT_PASSWORD=123456 \ #设置环境变量,此时为mysql的初始密码 -v /root/docker/mysql_data/mysql:/var/lib/mysql \ #把容器里面的路径映射到主机上 --name mysql 9cfcce23593a #设置此容器的名称,后面为该容器的ID,在本地或者远程仓库。
2.docker_php的创建
vim docker_php.sh #!/bin/bash docker run -d -p 9000:9000 \ #设置主机端口和对应的映射端口 -v /root/docker/nginx_data/html/:/var/www/html/ \ #映射主文件目录到主机上 -v /root/docker/php_data/logs:/var/log \ #映射日志到主机上 --link mysql:mysql \ #把上面的mysql关联在一起 --name php 8c82028c5638 #设置此容器的名称,后面为该容器的ID。
3.docker_nginx的创建
vim docker_nginx.sh #!/bin/bash docker run -d -p 80:80 --name nginx \ #设置主机端口和对应的映射端口,设置主机名 -v /root/docker/nginx_data/html/:/usr/share/nginx/html/ \ #映射主文件目录到主机上 -v /root/docker/nginx_data/conf/:/etc/nginx/ \ #映射配置文件到主机上 -v /root/docker/nginx_data/logs/:/var/log/nginx/ \ #映射日志到主机上 --link php:php \ #把上面的php关联到一起 --privileged=true 4037a5562b03
4.修改nginx的配置文件
vim vim /root/docker/nginx_data/conf/conf.d/default.conf server { listen 80; server_name localhost ; root /usr/share/nginx/html/; index index.php index.html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; listen 443 ssl; ssl_certificate "/etc/pki/nginx/server.pem"; ssl_certificate_key "/etc/pki/nginx/private/server.key"; location / { try_files $uri $uri/ /public/index.php?$query_string; } location ~ \.php$ { root /var/www/html/backstage_jiguang; fastcgi_pass 172.17.0.3:9000; index index.php index.htm; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
创建:分别执行 sh docker_mysql.sh ; sh docker_php.sh ; sh docker_nginx.sh 就能创建环境,一定要按照顺序来执行,因为php和nginx都关联了前者,必须前者创建后才能创建后者。
查看:up表示已经创建成功,可以通过访问本机路径来测试配置是否正确。
[root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8ca0c3965b52 4037a5562b03 "nginx -g 'daemon of…" 13 hours ago Up 13 hours 0.0.0.0:80->80/tcp nginx 9f5b20587150 8c82028c5638 "docker-php-entrypoi…" 13 hours ago Up 13 hours 0.0.0.0:9000->9000/tcp php 4da93455aee2 9cfcce23593a "docker-entrypoint.s…" 13 hours ago Up 13 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
二.通过docker-compose一键创建docker环境
除了用shell脚本外,我们还能用docker-file,docker-compose来编写yaml文件一键创建部署环境,docker-compose是docker提供的一个命令行工具,它可以定义和运行多个容器的组成,我们这边是通过编写yaml格式的文件来声明和定义应用程序和各个服务。
首先docker-compose需要的版本比较高,如果是docker 1.1左右的低版本需要更新到高版本。
编写yaml文件:因为上面已经创建了sh的脚本,我们参照上诉进行编写:
vim docker-compose.yml version: '3' services: mysql1: container_name: mysql1 image: 9cfcce23593a restart: always expose: - "3307" ports: - "3307:3307" volumes: - /root/docker/mysql_data/mysql:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=123456 php1: container_name: php1 image: 8c82028c5638 tty: true restart: always expose: - "9001" ports: - "9001:9001" volumes: - /root/docker/nginx_data/html/:/var/www/html/ - /root/docker/php_data/logs:/var/log depends_on: - mysql1 links: - mysql1 nginx1: container_name: nginx1 image: 4037a5562b03 tty: true restart: always ports: - "81:81" - "443:443" volumes: - /root/docker/nginx_data/html/:/usr/share/nginx/html/ - /root/docker/nginx_data/conf/:/etc/nginx/ - /etc/pki/nginx/server.pem:/etc/pki/nginx/server.pem - /etc/pki/nginx/private/server.key:/etc/pki/nginx/private/server.key - /root/docker/nginx_data/logs/:/var/log/nginx/ depends_on: - php1 links: - php1
创建:首先我们要在yaml的当前路径下执行命令,名称最好也叫docker-compose:
docker-compose up -d #一键创建 docker-compose down #一键关闭并且删除 docker-compose stop/start/rm 容器 # 停止/开始/删除