β

Docker入门与实战系列:进阶

孤岛旭日的个人空间 372 阅读

<p> Docker入门与实战——《Docker ABC》电子书 <a href="https://github.com/gudaoxuri/Docker_ABC" rel="nofollow"> https://github.com/gudaoxuri/Docker_ABC </a> </p> <h2> 7. 进阶 </h2> <blockquote> <p> 本节我们以运行 <code> Gitlab </code> 实例为例,进一步介绍Docker的常规使用。 </p> </blockquote> <table> <tbody> <tr> <td> 上节 <code> MySQL </code> 是独立的镜像,没有依赖,但 <code> Gitlab </code> 会依赖数据库及缓存,我们看看容器间如何交互。 <code> Gitlab </code> 有官方镜像,但我更喜欢 <code> sameersbn </code> 的版本,这个版本介绍详细,并且作者一直在持续更新。 </td> </tr> </tbody> </table> <h3> 7.1. 获取Redis镜像并运行 </h3> <pre><code>root@ubuntu:~# docker pull redis   ...   root@ubuntu:~# docker run --name gitlab-cache -d redis   a2c183f16cee0aa30eca8f27875d3770ac1291fc22b218d4b5e673ce604074c8</code></pre> <h3> 7.2. 获取MySQL镜像并运行 </h3> <pre><code>root@ubuntu:~# mkdir -p /opt/test/gitlab/db/  &lt;1&gt; root@ubuntu:~# docker pull mysql...   root@ubuntu:~# docker run --name gitlab-db -e MYSQL_ROOT_PASSWORD=123456 -d -p 3307:3306 -v /opt/test/gitlab/db:/var/lib/mysql mysql:5.7   c8110b8151e2ddbc67d2bb1d96a9cc24ef68546a885d065e78bd274775ec7f7</code></pre> <table> <tbody> <tr> <td> &lt;1&gt; </td> <td> 创建数据库目录映射 </td> </tr> </tbody> </table> <h3> 7.3. 创建相应的数据库及权限 </h3> <pre><code>root@ubuntu:~# docker exec -it gitlab-db /bin/bash root@7c8110b8151e:/# mysql -uroot -p123456 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.9 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&gt; CREATE USER 'gitlab'@'%.%.%.%' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec)

mysql&gt; CREATE DATABASE IF NOT EXISTS gitlabhq_production DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; Query OK, 1 row affected (0.00 sec)

mysql&gt; GRANT ALL PRIVILEGES ON gitlabhq_production.* TO 'gitlab'@'%.%.%.%'; Query OK, 0 rows affected (0.00 sec)

mysql&gt; exit
Bye
root@7c8110b8151e:/# exit
exit</code></pre>
<table>
<tbody>
<tr>
<td>
<code>
exec
</code>
表示进入一个运行中的容器
</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td>
MySQL中执行的语句见:
<a href="https://hub.docker.com/r/sameersbn/gitlab/#external-mysql-server" rel="nofollow">
https://hub.docker.com/r/sameersbn/gitlab/#external-mysql-server
</a>
</td>
</tr>
</tbody>
</table>
<h3>
7.4. 获取Gitlab镜像
</h3>
<pre><code>root@ubuntu:~# mkdir -p /opt/test/gitlab/data &lt;1&gt;
root@ubuntu:~# docker pull sameersbn/gitlab</code></pre>
<table>
<tbody>
<tr>
<td>
&lt;1&gt;
</td>
<td>
创建GIT数据目录映射
</td>
</tr>
</tbody>
</table>
<h3>
7.5. 运行Gitlab镜像
</h3>
<pre><code>root@ubuntu:~# docker run --name=gitlab -d \
-e GITLAB_PORT=10080 \ &lt;1&gt;
-e GITLAB_SSH_PORT=10022 \ &lt;2&gt;
-e GITLAB_HOST=inner.ecfront.com \ &lt;3&gt;
-e DB_TYPE=mysql \ &lt;4&gt;
-e DB_HOST=192.168.4.99 \
-e DB_PORT=3307 \
-e DB_NAME=gitlabhq_production \
-e DB_USER=gitlab \
-e DB_PASS=password \
-e GITLAB_EMAIL=git@ecfront.com \ &lt;5&gt;
-e SMTP_ENABLED=true \
-e SMTP_DOMAIN=ecfront.com \
-e SMTP_HOST=smtp.exmail.qq.com \
-e SMTP_PORT=25 \
-e SMTP_USER=git@ecfront.com \
-e SMTP_PASS=xxx \
-e SMTP_AUTHENTICATION=login \
-e NGINX_MAX_UPLOAD_SIZE=512m \ &lt;6&gt;
-e GITLAB_BACKUPS=monthly \ &lt;7&gt;
-p 10022:22 \ &lt;8&gt;
-p 10080:80 \ &lt;9&gt;
-v /opt/test/gitlab/data:/home/git/data \ &lt;10&gt;
--link gitlab-cache:redisio \ &lt;11&gt;
--dns=192.168.4.99 \ &lt;12&gt;
sameersbn/gitlab </code></pre>
<p>
&lt;1&gt; HTTP服务端口
<br/>
&lt;2&gt; SSH请求端口
<br/>
&lt;3&gt; 服务域名
<br/>
&lt;4&gt; 数据库连接信息
<br/>
&lt;5&gt; Email信息
<br/>
&lt;6&gt; 解决RPC failed; result=22, HTTP code = 413问题,见
<a href="http://stackoverflow.com/questions/7489813/github-push-error-rpc-failed-result-22-http-code-413" rel="nofollow">
http://stackoverflow.com/questions/7489813/github-push-error-rpc-failed-result-22-http-code-413
</a>
<br/>
&lt;7&gt; 备份策略,每天
<br/>
&lt;8&gt; SSH请求端口映射
<br/>
&lt;9&gt; HTTP请求端口映射
<br/>
&lt;10&gt; GIT数据目录映射
<br/>
&lt;11&gt; 连接Reids容器,实现缓存
<br/>
&lt;12&gt; 配置DNS
<br/>
</p>
<table>
<tbody>
<tr>
<td>
如果使用MySQL数据库一定要加上
<code>
-e DB_TYPE=mysql
</code>
否则这个容器会以默认的Postgre类型去连接导致无法启动
</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td>
<code>
--dns
</code>
用于指定容器的DNS,我们可以指定一个公共DNS以实现不同容器互PING
</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td>
Docker默认情况下容器间是不能互访的,要实现交互主要有两种途径,一是用
<code>
--link
</code>
这也是Docker推荐的做法,它会在容器中建立被Link容器的Host记录实现单向访问,另一种是开放服务实现调用,对于上述案例,Redis使用的是Link方式,MySQL使用是开放服务方式。
</td>
</tr>
</tbody>
</table>
<ul>
<li>
<p>
访问一下:
<code>
<a href="http://192.168.4.99:10080/" rel="nofollow">
http://192.168.4.99:10080
</a>
</code>
(192.168.4.99是我宿主机的IP),等等,为什么访问不了?
</p>
</li>
</ul>
<h3>
7.6. 查看运行日志
</h3>
<ul>
<li>
<p>
在出问题时我们首先想到的是
<strong>
去看看日志
</strong>
,Docker容器运行日志的查看如下:
</p>
</li>
</ul>
<pre><code>root@ubuntu:~# docker logs gitlab
ERROR:   Please configure the GITLAB_SECRETS_DB_KEY_BASE parameter.
Cannot continue. Aborting...</code></pre>
<p>
提示是需要
<code>
GITLAB_SECRETS_DB_KEY_BASE
</code>
变量,查看官方说明:
</p>
<blockquote>
<p>
<strong>
Note
</strong>
Since GitLab
<code>
8.0.0
</code>
you need to provide the
<code>
GITLAB_SECRETS_DB_KEY_BASE
</code>
parameter while starting the image.
</p>
<p>
<strong>
Tip
</strong>
You can generate a random string using <code> pwgen -Bsv1 64 </code> and assign it as the value of <code> GITLAB_SECRETS_DB_KEY_BASE </code> . </p> </blockquote> <p> — https://hub.docker.com/r/sameersbn/gitlab/ </p> <ul> <li> <p> 好的,我们用 <code> pwgen -Bsv1 64 </code> 生成一个密钥 </p> </li> </ul> <pre><code>root@ubuntu:~# pwgen -Bsv1 64   hpTqCXgf4tVbnFmdC7PNn9n4hWmCnvF479fsJtcdTkhmVfWfzpwTJ4sNRzNkkXf</code></pre> <ul> <li> <p> 把 <code> GITLAB_SECRETS_DB_KEY_BASE </code> 加上重新运行 </p> </li> </ul> <pre><code>root@ubuntu:~# docker rm -f gitlab root@ubuntu:~# docker run --name=gitlab -d \  -e GITLAB_PORT=10080 \  -e GITLAB_SSH_PORT=10022 \  -e GITLAB_HOST=inner.ecfront.com \  -e DB_TYPE=mysql \  -e DB_HOST=192.168.4.99 \  -e DB_PORT=3307 \  -e DB_NAME=gitlabhq_production \  -e DB_USER=gitlab \  -e DB_PASS=password \  -e GITLAB_SECRETS_DB_KEY_BASE=7hpTqCXgf4tVbnFmdC7PNn9n4hWmCnvF479fsJtcdTkhmVfWfzpwTJ4sNRzNkkXf \  -e GITLAB_EMAIL=git@ecfront.com \  -e SMTP_ENABLED=true \  -e SMTP_DOMAIN=ecfront.com \  -e SMTP_HOST=smtp.exmail.qq.com \  -e SMTP_PORT=25 \  -e SMTP_USER=git@ecfront.com \  -e SMTP_PASS=xxx \  -e SMTP_AUTHENTICATION=login \  -e NGINX_MAX_UPLOAD_SIZE=512m \  -e GITLAB_BACKUPS=monthly \  -p 10022:22 \  -p 10080:80 \  -v /opt/test/gitlab/data:/home/git/data \  --link gitlab-cache:redisio \  --dns=192.168.4.99 \  sameersbn/gitlab</code></pre> <h3> 7.7. 完成 </h3> <ul> <li> <p> 好了,第一次要做的事情比较多,过一会就可以打开页面了 </p> </li> </ul> <p> <img src="/imgr?src=http%3A%2F%2Fstatic.oschina.net%2Fuploads%2Fspace%2F2015%2F1107%2F080948_kEbB_816048.png&r=http%3A%2F%2Fmy.oschina.net%2Fgudaoxuri%2Fblog%2F527152"/> </p> <table> <tbody> <tr> <td> 用户名:root 密码:5iveL!fe </td> </tr> </tbody> </table>
作者:孤岛旭日的个人空间
孤岛旭日的博客
原文地址:Docker入门与实战系列:进阶, 感谢原作者分享。