本文通过一个简单的实践介绍下Docker在一般的场景的简单高效的应用过程,我们通过Docker部署一个开源的敏捷项目管理系统。因为gitsrum项目是采用PHP语言开发,我们需要一个mysql数据库,同时需要PHP的运行环境支撑。下面详细的描述下整个部署过程。
步骤一,准备部署配置文件
mkdir docker-gitscrum cd docker-gitsrum mkdir config log mysql www
添加Dockerfile文件,内容如下:
FROM php:7.1-fpm LABEL maintainer "xiaobaoqiang " COPY ./sources.list /etc/apt/sources.list RUN apt-get update RUN apt-get install -y \ git \ vim \ libz-dev \ libcurl4-gnutls-dev \ libmcrypt-dev \ libicu-dev \ zip \ unzip \ gnupg \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install iconv \ && docker-php-ext-install mcrypt \ && docker-php-ext-install intl \ && docker-php-ext-install opcache \ && docker-php-ext-install mbstring \ && docker-php-ext-install curl \ && docker-php-ext-install zip # Install nodejs RUN apt-get install -y software-properties-common RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - RUN apt-get install -y nodejs npm RUN npm config set registry https://registry.npm.taobao.org RUN npm install --global gulp gulp-cli # Install Composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN chmod 755 /usr/local/bin/composer # Set Composer Mirror RUN composer config -g repo.packagist composer https://packagist.laravel-china.org # Install php-cs-fixer #RUN curl -L https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v2.0.0/php-cs-fixer.phar -o /usr/local/bin/php-cs-fixer COPY ./php-cs-fixer.phar /usr/local/bin/php-cs-fixer RUN chmod a+x /usr/local/bin/php-cs-fixer RUN apt-get clean EXPOSE 9200 9000 80 CMD ["php-fpm"]
为了加速安装包的下载,我们添加163的镜像地址
vi sources.list # deb http://snapshot.debian.org/archive/debian/20190326T120000Z stretch main deb http://mirrors.163.com/debian stretch main # deb http://mirrors.163.com/archive/debian-security/20190326T120000Z stretch/updates main deb http://mirrors.163.com/debian-security stretch/updates main # deb http://mirrors.163.com/archive/debian/20190326T120000Z stretch-updates main deb http://mirrors.163.com/debian stretch-updates main
创建PHP的配置文件
cd config vi [global] error_log = /var/log/php-fpm/fpm-error.log daemonize = no [www] user = www-data group = www-data listen = [::]:9000 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 pm.status_path = /php/fpm/status clear_env = no access.log = /var/log/php-fpm/access.log access.format = "%t \"%m %r%Q%q\" %s %{mili}dms %{kilo}Mkb %C%%" catch_workers_output = yes php_flag[display_errors] = on php_admin_value[date.timezone] = "Asia/Shanghai"
vi php.ini [PHP] short_open_tag = off [Date] date.timezone = "Asia/Shanghai"
创建Nginx的配置文件
cd config vi server.conf server { listen 80; server_name app.gitscrum.dev; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /var/www/html/laravel-gitscrum/public; index index.php; client_max_body_size 25M; fastcgi_read_timeout 1800; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { try_files $uri =404; fastcgi_pass phpfpm-gitscrum:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } location /php/fpm/status { fastcgi_pass phpfpm-gitscrum:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } }
创建mysql配置文件
cd config vi docker.cnf [mysqld] skip-host-cache skip-name-resolve default_authentication_plugin = mysql_native_password
步骤二,下载gitsrum源代码
cd www git clone https://github.com/gitscrum-community/laravel-gitscrum.git
修改gitsrum的配置文件.env
cd www/laravel-gitscrum vi .env APP_ENV=local APP_KEY=base64:W2ToyfW8zHqtWfcZb1hp2kZgccbuy3XtERDyZywtVkE= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://10.0.0.50 APP_TITLE=GitScrum APP_LANG=zh_cn GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= GITLAB_KEY=9e9bbc01d983c9bca487b468de1afd9389xxxxxxxxxxxxxxxxxxxxxxx GITLAB_SECRET=9436d9fae69e7e9ebd359c14b8e1222xxxxxxxxxxxxxxxxxxxxxxx GITLAB_INSTANCE_URI=http://10.0.0.50:9080/ BITBUCKET_CLIENT_ID= BITBUCKET_CLIENT_SECRET= DB_CONNECTION=mysql DB_HOST=mysql-gitscrum DB_PORT=3306 DB_DATABASE=develop DB_USERNAME=gitscrum DB_PASSWORD=123456 APP_PAGINATE=10 PROXY_PORT= PROXY_METHOD= PROXY_SERVER= PROXY_USER= PROXY_PASS= SLACK_CHANNEL=channel-name SLACK_BOT_NAME=bot-name SLACK_WEBHOOK=endpoint
步骤三,开始部署
创建Docker部署配置文件
vi docker-compose.yml # PHP phpfpm-gitscrum: build: . restart: always environment: - DEBUG=1 volumes: - ./config/php-fpm.conf:/usr/local/etc/php-fpm.conf - ./config/php.ini:/usr/local/etc/php/php.ini - ./www:/var/www/html - ./log/php-fpm:/var/log/php-fpm links: - mysql-gitscrum # NGINX nginx-gitscrum: restart: always image: nginx ports: - "80:80" links: - phpfpm-gitscrum volumes: - ./config/server.conf:/etc/nginx/conf.d/default.conf - ./www:/var/www/html - ./log/nginx:/var/log/nginx # MYSQL mysql-gitscrum: restart: always image: mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_USER: gitscrum MYSQL_PASSWORD: 123456 MYSQL_DATABASE: develop volumes: - ./mysql/databases:/var/lib/mysql - ./log/mysql:/var/log/mysql - ./config/docker.cnf:/etc/mysql/conf.d/docker.cnf
安装部署工具
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose docker-compose --version docker-compose version 1.24.0, build 1110ad01
开始部署
docker-compose up --build ....................... ....................... Successfully built c4fe14fa3da3 Successfully tagged docker-gitscrum_phpfpm-gitscrum:latest Creating docker-gitscrum_mysql-gitscrum_1 ... done Creating docker-gitscrum_phpfpm-gitscrum_1 ... done Creating docker-gitscrum_nginx-gitscrum_1 ... done Attaching to docker-gitscrum_mysql-gitscrum_1, docker-gitscrum_phpfpm-gitscrum_1, docker-gitscrum_nginx-gitscrum_1 mysql-gitscrum_1 | 2019-05-01T05:02:08.915841Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. mysql-gitscrum_1 | 2019-05-01T05:02:08.915918Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.16) starting as process 1 mysql-gitscrum_1 | 2019-05-01T05:02:09.904586Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. mysql-gitscrum_1 | 2019-05-01T05:02:09.906606Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. mysql-gitscrum_1 | 2019-05-01T05:02:09.920529Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.16' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. mysql-gitscrum_1 | 2019-05-01T05:02:10.170904Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060
出现上述日志,说明gitsrum的PHP和Mysql环境已经启动成功了
步骤四,验证
查看我们刚才构建的gitsrum docker镜像
docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker-gitscrum_phpfpm-gitscrum latest c4fe14fa3da3 4 days ago 711MB php 7.1-fpm 5bc07b7ec70a 6 days ago 358MB mysql latest d72169616e20 6 days ago 443MB gitlab/gitlab-ce latest b3a3f6564d33 7 days ago 1.77GB nginx latest 27a188018e18 2 weeks ago 109MB
查看docker启动的容器
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b28667f9e2d nginx "nginx -g 'daemon of…" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp docker-gitscrum_nginx-gitscrum_1 dd439b5982b3 docker-gitscrum_phpfpm-gitscrum "docker-php-entrypoi…" 4 minutes ago Up 4 minutes 80/tcp, 9000/tcp, 9200/tcp docker-gitscrum_phpfpm-gitscrum_1 70ae5d88c24c mysql "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp docker-gitscrum_mysql-gitscrum_1
通过浏览器访问http://10.0.0.50
出现上面截图内容,说明我们的gitsrum启动成功并且可以访问。
由于gitsrum系统采用Oauth登陆,它并不提供用户注册的功能,所以我们需要在laravel-gitscrum的.env配置Oauth的登陆信息,下面配置参数只是一个示例:
GITLAB_KEY=9e9bbc01d983c9bca487b468de1afd9389xxxxxxxxxxxxxxxxxxxxxxx GITLAB_SECRET=9436d9fae69e7e9ebd359c14b8e1222xxxxxxxxxxxxxxxxxxxxxxx GITLAB_INSTANCE_URI=http://10.0.0.50:9080/
参考:
https://github.com/gitscrum-community/docker-gitscrum
https://docs.docker.com/compose/install/
文章如有不妥之处,欢迎指正!谢谢!