Docker学习笔记(三)
Docker学习笔记(三)
容器的标识符
docker run --name db --env MYSQL_ROOT_PASSWORD=example -d mariadb
#--name:为容器指定名称
#--env:指定变量
#-d:后台运行容器,并返回容器ID
#--detach=false:指定容器运行前台还是后台,默认为false
CONTAINER ID作为容器的唯一标识,默认为128位,一般使用简略形式即前16位。
#docker ps --no-trunc:可以查看完整的容器ID
通过容器ID管理容器
docker stop f48d2db645ca #停止容器运行
docker start f48d2db645ca #启动容器
docker start Docker_name #也可以使用指定的容器名
查询容器信息
docker inspect [options] container|image [container|image]
#查询容器的所有基本信息,包括运行情况、存储位置、配置参数、网络设置等。
例:docker inspect Docker_Name
-f:可以使用Golang的模板来提取指定部分的信息,以JSON的格式展示;
例:docker inspect -f {{.State.Status}} Docker_Name
查询日志
docker logs Docker_Name
-f:实时打印最新的日志
实时查看容器所占用的系统资源,如CPU使用率、内存、网络和磁盘开销
docker stats Docker_Name
容器内部命令
Docker提供了原生的方式支持登入容器
格式:docker exec [options] container_name command [arg..]
参数:-it:以root身份登入容器,以exit退出
例:docker exec MywordPress ps -ef
例:docker exec -it MywordPress /bin/bash
多容器管理
docker run通过“--link”建立容器建的关联。前提是关联容器已经创建并启动运行,多个容器关联时需要考虑启动顺序。
参数:--link <name or id>:alias:指定荣期间的关联,使用其他容器的IP、env等信息
-p:指定容器暴露的端口,容器端口:服务端口
例:docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
docker run --link容器间的通信方式:设置环境变量、更新/etc/hosts文件
设置环境变量时,会将link中的别名设置为环境变量;
格式:<alias>_NAME=/接受容器名/源容器alias
例:MYSQL_NAME=/MywordPress/mysql #alias是大写
同时容器中会创建关于源容器暴露的端口号的环境变量;
格式:<name>_PORT_<port>_<protocol> #name=alias;port=源容器暴露端口;protocol=通信协议[tcp/udp]
例:MYSQL_PORT_3306_TCP=tcp://172.17.0.2:3306
docker定义了以此为前缀的3个环境变量: <name>_PORT_<port>_<protocol>_ADDR
<name>_PORT_<port>_<protocol>_PORT
<name>_PORT_<port>_<protocol>_PORTO
例:MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_PORT_3306_TCP_ADDR=172.17.0.2
MYSQL_PORT_3306_TCP_PROTO=tcp
#暴露多个端口时,一个端口一组,会有多组
docker定义了值为源容器的URL:<alias>_PORT
例:MYSQL_PORT=tcp://172.17.0.2:3306 #暴露端口中最小的端口号
关联容器还会获取源容器的暴露的环境变量:源容器Dockerfile中ENV标签设置的环境变量
源容器用docker run命令创建中-e或者--env-file设置的环境变量
格式:<alias>ENV<name>
Docker Compose
docker提供一个容器编排工具--Docker Compose,允许用户在一个模板(yaml格式)中定义一组相互关联的应用容器,会根据模板中的“--link”等参数,对启动的优先级自动排序,执行“docker-compose up”,就可以依次创建。
安装:curl -L https://github.com/docker/compose/releases/download/1.6.0/docker-compose-`uname -s`-`uname -m`> /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
动手试试:
1、创建文件并编辑docker-compose.yaml,docker-compose命令指定默认文件名,
wordpress: #容器名
image: wordpress #定义镜像
links: #指定关联容器和关联容器别名
- db:mysql
ports: #指定暴露的端口和对应服务端口
- 8080:80
db:
image: mariadb
environment: #设置环境变量
MYSQL_ROOT_PASSWORD: example
2、创建并启动文件中的容器
docker-compose up #默认前台运行,ctrl+c退出后容器关闭 #参数:-d:后台运行
#启动命令:
docker-compose start #启动命令,不能创建容器,默认后台运行
docker-compose stop #停止命令
3、容器的删除
查看所有容器
docker ps -a #-a:查看所有容器
删除容器
docker rm MyWordPress db
docker-compose的配置文件
可以将多容器信息写进配置文件,默认文件名docker-compose.yaml,也可以使用“-f”指定配置文件。
动手试试:
创建一个gitlab项目,容器:postgresql、redis、gitlab
一、通过docker run命令实现
1、创建并启动pg
docker run --name gitlab-pg -d \
--env 'DB_NAME=gitlabhq_production' \
--env 'DB_USER=postgresql' \
--env 'DB_PASS=password' \
sameersbn/postgresql:9.4-12 #仓库名/镜像名:镜像标签
2、创建并启动redis
docker run -name gitlab-redis -d sameersbn/redis:latest
3、创建并启动gitlab
docker run -name gitlab -d \
--link gitlab-pg:postgresql \
--link gitlab-redis:redisio \
--publish 10022:22 \ #--publish和-p同义,指定容器暴露的端口
--publish 10080:80 \
--env 'GITLAB_PORT=10080' \
--env 'GITLAB_SSH_PORT=10022' \
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
sameersbn/gitlab:8.4.4
#docker run命令复杂不易管理
二、通过docker-compose编排工具安装pg、redis、gitlab
1、pg的yaml
gitlab-pg:
image: sameersbn/postgresql:9.4-12
environment:
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
2、redis的yaml
gitlab-redis:
iamge: sameersbn/redis:latest
3、gitlab的yaml
gitlab:
image: sameersbn/gitlab:8.4.4
link:
- gitlab-redis: redisio
- gitlab-pg: postgresql
ports:
- "10080:80"
- "10022:22"
environment:
- GITLAB_PORT=10080
- GITLAB_SSH_PORT=10022
- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string
三、个人博客redmine
docker run --name=postgresql-redmine -d \
--env='DB_NAME=redmine_production' \
--env='DB_USER=redmine' \
--env='DB_PASS=password' \
sameersbn/postgresql:9.4-12
docker run --name=redmine -d \
--link=postgresql-redmine:postgresql \
--publish=10083:80 \
--env='REDMINE_PORT=10083' \
sameersbn/redmine:3.2.0-4
yaml配置文件版:
postgresql-redmine:
image: sameersbn/postgresql:9.4-12
environment:
- DB_NAME=redmine_production
- DB_USER=redmine
- DB_PASS=password
redmine:
image: sameersbn/redmine:3.2.0-4
links:
- postgresql-redmine:postgresql
ports:
- "10083:80"
environment:
- REDMINE_PORT=10083