Docker容器管理
1. 单一容器管理
1) 容器的启动
$ docker run --name gitlab-redis -d --volume /srv/docker/gitlab/redis:/var/lib/redis sameersbn/redis:latest
指令解释如下:
- run: 启动一个容器;
- --name: 指定容器的名字;
- --volume : 指定容器使用文件夹(具体后面会讲到)
2) 容器的标识符
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
92cbb6ddb276 cptactionhank/atlassian-jira:latest "/docker-entrypoin..." 21 hours ago Exited (137) About an hour ago determined_wright
d07ead10f5c1 sameersbn/redmine "/sbin/entrypoint...." 22 hours ago Exited (0) 21 hours ago redmine
9b06a948213f sameersbn/postgresql "/sbin/entrypoint.sh" 22 hours ago Exited (0) 21 hours ago postgresql-redmine
52c9c9129437 sameersbn/gitlab "/sbin/entrypoint...." 2 days ago Exited (137) 2 days ago gitlab
4b302844ad58 sameersbn/redis "/sbin/entrypoint.sh" 2 days ago Exited (0) 2 days ago gitlab-redis
ba172ce6a31b sameersbn/postgresql "/sbin/entrypoint.sh" 2 days ago Exited (137) 2 days ago gitlab-postgresql
de08f753bc6b wordpress "docker-entrypoint..." 2 days ago Exited (0) 2 days ago MyWordPress
每个容器被创建后,都会给其分配一个唯一标识CONTAINER ID(为128位,但一般显示为16位),通过docker ps能查到其16位简略形式。
以下指令均可以查看某个容器相关信息:
docker ps -a | grep 容器id/容器名
docker stop 容器id/容器名
docker start 容器id/容器名
3) 查看容器信息
docker inspect 容器id/容器名 //查看某容器详细信息
docker inspect -f {{.State.Status}} 容器id/容器名 //通过-f 使用Golang的模板提取容器的运行状态
docker inspect -f {{.NetworkSetting.IPAddress}} 容器id/容器名 //提取容器的IP地址
docker logs 容器id/容器名 //查看容器日志
docker logs -f 容器id/容器名 //实时打印容器日志
docker stats 容器id/容器名 //查看容器所占用的系统资源
4) 容器内部命令
docker exec+容器名+容器内执行的命令
docker exec 容器名/容器id ps aux //查看容器内启动了哪些进程
docker exec -it 容器id/容器名 /bin/bash //加上-it可以在容器内执行多个命令
2. 多容器管理
当一个服务由多个容器组成时,需要启动多个容器,容器的通信通过--link进行关联
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.6-2
docker run --name gitlab-redis -d
--volume /srv/docker/gitlab/redis:/var/lib/redis
sameersbn/redis:latest
docker run --name gitlab -d
--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'
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string'
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string'
--volume /srv/docker/gitlab/gitlab:/home/git/data
sameersbn/gitlab:9.4.1
但是有个问题是多个容器的启动和停止是需要按依赖的顺序有先后顺序的,不然会出现问题。
1) Docker Compose
Docker提供了一个容器启动管理工具能交一个服务内相互以来的容器进行YAML格式的文件配置,通过简单的命令进行启动和停止
安装Docker Compose的安装方式:
sudo curl -L https://github.com/docker/compose/releases/download/1.6.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/loacl/bin/docker-compose
创建docker-compose.yml文件:
wordpress:
image: wordpress
links:
- db:mysql
ports:
- 8080:80
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: example
docker-compose相关命令如下:
docker-compose up //新建服务,会默认寻找当前目当下的
docker-compose up -d //后台启动容器组docker-compose.yml/.yaml文件
docker-compose up -f xxx/docker-compose.yaml up新建服务,指定docker-compose.yml/.yaml文件
docker-compose start //启动服务容器组
docker-compose stop //停止容器组
docker-compose [-f yml文件] ps//查看服务里的容器组状态
docker-compose [-f yml文件] start //容器组启动
docker-compose [-f yml文件] stop //容器组组停止
docker-compose [-f yml文件] donw //容器组删除