用docker安装应用服务器
用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服务器
两种方式:
- 直接命令行安装并启动
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
先从github上把registry clone到宿主机,然后再进入registry目录,执行:docker build -t registryName
把项目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映射与宿主机的端口,所以我要先退出再重新映射端口,好像没有给运行中的容器添加端口映射的方法,所以只能分三步:
stop running container
docker stop test01
commit the container
docker commit test01 test02
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目录的
但什么情况下使用这个呢?
- Volume labels
- data volume container
以下是我的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中的架构图:
所以接下来要做的就分三步了:
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
Launch a redis container
docker run --name gitlab-redis -d \ --volume /srv/docker/gitlab/redis:/var/lib/redis \ sameersbn/redis:latest
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的安装作到极简了,容器化安装。。。。。