文章目录
  1. 1. 用docker安装应用服务器
    1. 1.1. 搭建公司内网docker服务器
    2. 1.2. 安装需要的应用软件
      1. 1.2.1. 安装配置nginx
    3. 1.3. docker 安装gitlab
      1. 1.3.1. pull gitlab
      2. 1.3.2. gitlab官网终于容器化 了

用docker安装应用服务器

参考官方文档:安装docker

curl -fsSL https://get.docker.com/ | sh
  • 如果已经下载过,重装docker的话:

      yum -y -q install docker-engine
    
  • 卸载docker:

      (1)yum list installed | grep docker
    
      (2)sudo yum -y remove docker-engine.x86_64
    
      (3)rm -rf /var/lib/docker
    

用这个安装后,发现一个错误:

[root@localhost ~]# docker pull nginx
Using default tag: latest
Post http:///var/run/docker.sock/v1.20/images/create?fromImage=nginx%3Alatest: dial unix /var/run/docker.sock: no such file or directory.
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?

是因为linux系统默认没有启动docker服务,执行:

systemctl start docker	

就好了。。。。

因为我用的是fedora版本的linux系统,故要设置自动重启:

sudo chkconfig docker on

由于国内访问doucloud hub 奇慢无比,故我把主机接入到国内的daocloud.
接入自有主机集群

curl -sSL https://get.daocloud.io/daomonit/install.sh | sh -s faf72fe49e97a****************************

注意,-s 参数后面的的字符串是你的daocloud里的字符串,这个字符串是唯一的.

搭建公司内网docker服务器

两种方式:

  1. 直接命令行安装并启动

参考官网

    docker run -d -e SETTINGS_FLAVOR=dev -p 5000:5000 --restart=always --name local-registry -v `pwd`/config.yml:/opt/data/registry/config.yml registry
  • 因为我把config.yml已经放在了/opt/data/registry下面了,所以指定它的配置路径

  • 指定docker的运用环境为dev模式:SETTINGS_FLAVOR=dev

    1. 先从github上把registry clone到宿主机,然后再进入registry目录,执行:docker build -t registryName

    2. 把项目https://github.com/docker/docker-registry.git克隆到本地,然后使用Dockerfile来build镜像

       # clone https://github.com/docker/docker-registry.git
       # cd docker-registry && mkdir -p /opt/data/registry
       # docker build -t "local-registry" .
      

build完成后,就可以运行这个docker-registry
我们先配置自己的config.yml文件,我暂时用默认的,以后用的时候可以改。

  • 运行刚刚build的本地registry镜像

    docker run local-registry -p 5000:5000

安装需要的应用软件

安装配置nginx

刚搭建好的docker registry服务器是没有任何软件的,需要你自己将镜像添加到registry里

docker pull nginx && docker tag locahost:5000/nginx
docker push localhost:5000/nginx

从私服里拉取nginx:

 docker pull localhost:5000/nginx	
 
 

查看下我们的镜像列表:

[root@localhost ~]# docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
localhost:5000/nginx                    latest              c0e6aba9c87a        34 hours ago        182.6 MB
nginx                                   latest              c0e6aba9c87a        34 hours ago        182.6 MB
<none>                                  <none>              9abcb5b363d4        34 hours ago        182.6 MB
ubuntu                                  14.04               ffbf13a52255        2 days ago          187.9 MB
daocloud.io/daocloud/daocloud-toolset   latest              8d9e14f4e185        3 days ago          150.3 MB
registry                                latest              061610023430        10 weeks ago        422.8 MB

启动nginx的两种方法:

  • 官方安装启动方式

    docker run –name mynginx -v /some/content:/usr/share/nginx/html:ro -d daocloud.io/nginx

ps:用的源是daocloud的 nginx,如果你是翻墙用户,网速很好,可以直接写软件名称,设置了共享静态网页目录

  • 使用dockerfile启动并build容器

如要通过dockerfile创建并初始化nginx镜像,设置一个共享静态文件目录:

mkdir myNginx && cd myNginx && touch Dockerfile

FROM daocloud.io/nginx
COPY static-html-directory /usr/share/nginx/html

每次有发布,就进入myNginx目录,build一次,就会把宿主机上的静态资源文件copy到nginx的目录里

然后再执行:

docker run --name mynginx -v /some/content:/usr/share/nginx/html:ro -d daocloud.io/nginx

最后进入:

docker exec -it [containId] bash

默认nginx的主程序都安装在:

/etc/nginx

进入到/etc/nginx可以查看它的nginx.conf文件:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
worker_connections  1024;
}


http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;

keepalive_timeout  65;

#gzip  on;

include /etc/nginx/conf.d/*.conf;
}

由于我之前启动时没有给nginx映射与宿主机的端口,所以我要先退出再重新映射端口,好像没有给运行中的容器添加端口映射的方法,所以只能分三步:

  1. stop running container

     docker stop test01
    
  2. commit the container

     docker commit test01 test02
    
  3. re-run from the commited image

     docker run -p 80:80 -td test02
    

删除镜像:

docker rmi immageName/imgID

删除容器:

docker rm containId/name

网上很多文章说这种方式是可以的设置共享html和conf,

docker run --name mynginx2 -v /var/www:/usr/share/nginx/html:ro -v /var/nginx/conf:/etc/nginx:ro -P -d nginx

但是经过我一个下午的测试与试验,-v /var/nginx/conf:/etc/nginx/conf.d:ro 这句是不能加的,一加上就无法启动。

option参数 ro的意思是设置这个共享目录在容器里是只读

最后在网上折腾了很久,在官网找到正解:

docker run --name nginx -p 80:80 -v `pwd`/var/nginx/config:/etc/nginx/sites-enabled  -v `pwd`/logs/nginx:/var/log/nginx  -d nginx

还有个问题,就是Dockfile文件里的VOLUME定义的目录到底有毛用啊?为什么我设置了和没有设置是一样的呢?唯一的就是在我宿主机上多了我设置的目录,但是里面的内容全是空的,也没有和容器的那个相对应的目录里的文件同步

这个问题找到答案了:

1。VOLUME本质上设计的是和-v是一样的,但是因为build的images是不支持设置host的mount目录的

图片

但什么情况下使用这个呢?

  1. Volume labels
  2. data volume container

data volume container的用法

Dockerfil使用方法

以下是我的Dockerfile文件内容:

FROM nginx
#COPY /some/content/html /usr/share/nginx/html

VOLUME /usr/share/nginx/html
VOLUME /etc/nginx
#VOLUME ["/some/content/html"]
#VOLUME ["/some/share/nginx/logs", "/var/log/nginx"]

EXPOSE 80

**如果要将nginx 的config进行管理的话,可以通过在Dockerfile里从host 机器上copy conf 替换掉containne的default.conf
**
重启nginx:

docker restart [CONTAINER ID]

docker 安装gitlab

pull gitlab

    docker build -t sameersbn/gitlab github.com/sameersbn/docker-gitlab	
    

先来看看gitlab在docker中的架构图:

图片

所以接下来要做的就分三步了:

  1. Launch a postgresql container

     docker run --name gitlab-postgresql -d \
     --env 'DB_NAME=gitlabhq_production' \
     --env 'DB_USER=gitlab' --env 'DB_PASS=password' \
     --env 'DB_EXTENSION=pg_trgm' \
     --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \
     sameersbn/postgresql:9.4-18
     
     
     
    
  2. Launch a redis container

     docker run --name gitlab-redis -d \
     --volume /srv/docker/gitlab/redis:/var/lib/redis \
     sameersbn/redis:latest
     
     
    
  3. Launch the gitlab containe

     docker run --name gitlab -d \
     --restart=always \
     --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
     --publish 10022:22 --publish 10080:80 \
     --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \
     --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
     -e 'GITLAB_HOST=101.81.74.171' \
     -e 'GITLAB_PORT=8000' \
     -e 'SMTP_ENABLED=true' \
       -e 'SMTP_DOMAIN=www.mail.163.com/' \
       -e 'SMTP_HOST=smtp.163.com' \
       -e 'SMTP_PORT=25' \
       -e 'SMTP_USER=LebondAPP@163.com' \
       -e 'SMTP_PASS=lebond1234' \
       -e 'SMTP_AUTHENTICATION=login' \
       -e 'GITLAB_MAX_OBJECT_SIZE=104857600' \
     --volume /srv/docker/gitlab/gitlab:/home/git/data \
     sameersbn/gitlab:8.6.4
    
  • 备份和恢复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

    • 重新pull gitlab镜像

docker pull sameersbn/gitlab:7.11.4

  • 重启容器

      docker restart [containid]	
    
  • 从宿主机上cp文件到容器:

        docker cp test.conf [containId]:/etc/nginx/conf.d
    

配置163邮箱时,需要开启pop授权,授权码会发到手机,用授权码配置为邮箱密码

gitlab官网终于容器化 了

2016年6月份,gitlab终于把gitlab的安装作到极简了,容器化安装。。。。。

使用docker安装容器化的gitlab

文章目录
  1. 1. 用docker安装应用服务器
    1. 1.1. 搭建公司内网docker服务器
    2. 1.2. 安装需要的应用软件
      1. 1.2.1. 安装配置nginx
    3. 1.3. docker 安装gitlab
      1. 1.3.1. pull gitlab
      2. 1.3.2. gitlab官网终于容器化 了