Ubuntu16.04使用Docker部署Gitlab

2017/7/5 posted in  Docker

我个人非常不喜欢用SVN同步代码,正好想重温一下docker的一些命令,那就用docker方便的搭建一下gitlab.

ubuntu安装docker

前提条件

Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的Ubuntu版本是否支持 Docker 。
打开控制台使用 uname -r命令来查看你当前的内核版本。

$ uname -r
 3.11.0-15-generic

安装步骤

sudo apt-get update
sudo apt-get update $ sudo apt-get install wget  //安装wget
wget -qO- https://get.docker.com/ | sh     //获取最新版本的 Docker 安装包,输入完成之后,就会下载脚本并且安装Docker及依赖包。
docker info //验证安装结果

问题

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

  • 解决: sudo su - //切换到root
    service docker start //启动docker service
    docker images //显示所有images
    docker run hello-world //重新运行
    恩,是权限问题,当前用户没权限,root用户可以运行

下载需要的镜像

以下脚本会下载gitlab,mysql,redis镜像

docker pull sameersbn/gitlab:latest
docker pull sameersbn/mysql:latest
docker pull sameersbn/redis:latest

启动需要的镜像

启动redis

docker run \
  --name=gitlab_redis \
  -tid \
  sameersbn/redis:latest

启动mysql

注意这里写你的用户名和密码

mkdir -p /opt/gitlab/mysql
docker run \
  --name=gitlab_mysql \
  -tid \
  -e 'DB_NAME=gitlabhq_production' \
  -e 'DB_USER=gitlab' \
  -e 'DB_PASS=password' \
  -v /opt/gitlab/mysql:/var/lib/mysql \
  sameersbn/mysql:latest

启动gitlab

docker run \
  --name='gitlab' \
  -itd \
  --link gitlab_mysql:mysql \
  --link gitlab_redis:redisio \
  -e 'GITLAB_PORT=80' \
  -e 'GITLAB_SSH_PORT=22' \
  --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
  --env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
  --env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
  -p 10022:22 -p 10080:80 \
  -v /var/run/docker.sock:/run/docker.sock \
  -v $(which docker):/bin/docker \
  -v /opt/gitlab/data:/home/git/data \
  -v /opt/gitlab/log:/var/log/gitlab \
  sameersbn/gitlab:latest

这一步骤会耗时几分钟,因为这一步会做一些初始化操作,我们可以通过docker logs gitlab来查看安装过程。
我们指定了10022作为ssh的访问端口,10080作为http的访问端口,

执行完后,稍微过1-2分钟后,打开以下地址应该就可以访问gitlab了
http://localhost:10080
如果是在服务器上搭建,请替换localhost为服务器地址

注意:

当出了问题,可以用一些命令查看

# 列出正在运行的容器
root@bigdata:~# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                                   NAMES
aa93b0654f4b        sameersbn/gitlab:latest   "/sbin/entrypoint...."   43 minutes ago      Up 13 minutes       443/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp   gitlab
881c31d50c53        sameersbn/mysql:latest    "/sbin/entrypoint...."   About an hour ago   Up 14 minutes       3306/tcp                                                gitlab_mysql
e5573736680f        sameersbn/redis:latest    "/sbin/entrypoint.sh"    About an hour ago   Up 14 minutes       6379/tcp                                                gitlab_redis


  • 列出所有容器的状态
    ```
    root@bigdata:~# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    aa93b0654f4b sameersbn/gitlab:latest "/sbin/entrypoint...." 44 minutes ago Up 14 minutes 443/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp gitlab
    881c31d50c53 sameersbn/mysql:latest "/sbin/entrypoint...." About an hour ago Up 14 minutes 3306/tcp gitlab_mysql
    e5573736680f sameersbn/redis:latest "/sbin/entrypoint.sh" About an hour ago Up 15 minutes 6379/tcp gitlab_redis
后面可以是容易id,也可以是容器名称
+ docker start CONTAINER ID #启动容器
+ docker stop CONTAINER ID #停止容器
+ docker rm -f CONTAINER ID #删除容器
+ docker logs CONTAINERID  #查看容器的运行时日志

# 进入docker中的服务器

docker exec -it 容器名字 bash

举例:
上面部署gitlab,我们还启动了一个mysql容器,我们可以进入这个mysql容器里面看看

root@bigdata:~# docker exec -it gitlab_mysql bash
root@881c31d50c53:/# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.5.54-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2016, 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>

这样就进入了mysql容器中了.

# 加入开机启动

加入/etc/rc.local

echo 'docker start gitlab_redis' >> /etc/rc.local
echo 'docker start gitlab_mysql' >> /etc/rc.local
echo 'docker start gitlab' >> /etc/rc.local


# 备份和恢复gitlab

## 备份

docker stop gitlab && docker rm gitlab
docker run --name=gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:latest app:rake gitlab:backup:create


## 恢复

docker stop gitlab && docker rm gitlab
docker run --name=gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:latest app:rake gitlab:backup:restore


## 补充
当进入了gitlab的web页面后,新建了一个项目.可以用下面的链接去把工程clone下来.
ip换成你的ip地址.因为上面做了端口映射容器的80端口映射到外面是10080端口.

git clone http://10.211.55.7:10080/shiwei/learndocker.git