暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

原创|NO.B.0003——docker容器管理|docker容器基础命令|单一容器管理|多容器管|docker-compose

Java BBS 2021-01-31
260

一、docker基础概念及命令

docker三个重要概念:仓库/Repository;镜像/image;容器/Container
docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
注:
//仓库:仓库是用来存储镜像环境的
//镜像:封装好的运行环境;镜像可以被上传到仓库里
//容器:是镜像运行完成以后得到的正在运行的运行环境

docker指令的基本用法(yuanjian):

docker+命令关键字(COMMAND)+一系列的参数
docker info //守护进程的系统资源设置
docker search //docker仓库的查询
docker pull //docker仓库的下载
docker images //docker镜像查询
docker rmi //docker 镜像删除
docker ps //docker容器的查询
docker run //docker容器的创建启动
docker start/stop //docker 容器停止


//docker指令除了单条使用外,还支持赋值/解析变量/嵌套使用

操作示例:

[root@localhost ~]# docker info
Storage Driver: overlay //重点overlay比dm更稳定
[root@localhost ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14185 [OK] //官方镜像
[root@localhost ~]# docker pull nginx
Using default tag: latest //latest 默认的
latest: Pulling from library/nginx
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 f07dfa83b528 Less than a second ago 448 MB
nginx latest ae2feff98a0c 20 hours ago 133 MB
hello-world latest bf756fb1ae65 11 months ago 13.3 kB
注:
//镜像大小占用多少存储资源:镜像的size值相加是不正确的,只能通过df来查看;
//镜像是分层的,如果有使用镜像,就会跳出下载;使用公用镜像;公用显示的是源镜像大小;size显示的是大于或者等于镜像存储单位的,万一一个公用镜像都没有。
[root@localhost ~]# docker rmi hello-world:latest
[root@localhost ~]# docker rmi bf75
Untagged: hello-world:latest
//镜像名称+版本号 或者直接使用ID号;一般写四位就可以删除
[root@localhost ~]# docker ps //docker ps只能查看当前正在运行的镜像,已经退出关闭的不显示
[root@localhost ~]# docker ps -a //可以查看所有的容器
[root@localhost ~]# docker rm 63b4 //删除容器:docker rm+ID号前四位 或者 容器的名称 若显示正在运行的容器,加上-f强制删除
[root@localhost ~]# docker ps -a -q //-a:显示所有的容器, -q:只显示ID号,
63b42d67206c
8792d83ffa3e
[root@localhost ~]# docker rm -f $( docker ps -a -q ) //使用for循环,先执行括号内的,再执行括号外面的。

单一容器管理

每个容器被创建后,都会分配一个CONTAINER ID 作为容器的唯一标识,后续对容器的启动/停止/修改/删除等所有操作,都是通过CONTAINER ID来完成,偏向于数据库概念中的主键(yuanjian)

docker ps --no-trunc                          //查看
docker /stop/start CONTAINERID //停止
docker start/stop MywordPress //通过容器别名启动/停止
docker inspect MywordPress //查看容器所有基本信息
docker logs MywordPress //查看容器日志
docker stats MywordPress //查看容器所占用的系统资源
docker exec 容器名 容器内执行的命令 //容器执行命令
docker exec -it 容器名 /bin/bash //登入容器的bash


//run延伸
--restart=always //容器的自动启动
-h x.xx.xx //设置容器的主机名
--dns xx.xx.xx.xx //设置容器使用的DBS服务器
--dns-search //DNS搜索设置
--add-host hostname:IP //注入hostname<>IP解析
--rm //服务停止时自动删除

操作示例:

[root@localhost ~]# docker ps --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e20dd845a52a04290bb9868b19528207010110fdbeebf079ccca36b13a564e5b wordpress:latest "docker-entrypoint.sh apache2-foreground" 40 seconds ago Up 38 seconds 0.0.0.0:80 //会变成完整的128位
[root@localhost ~]# docker inspect e20dd845a52a //容器的配置信息 docker inspect+ID/name/别名
"IPAddress": "172.18.0.3", //ip地址
[root@localhost ~]# docker logs e20dd845a52a //容器的日志信息 docker logs+ID/name/别名
[root@localhost ~]# docker stats e20dd845a52a //查看容器的信息 docker stats+ID/name/别名
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
e20dd845a52a 0.01% 65.78 MiB / 3.701 GiB 1.74% 1.9 kB / 1.82 kB 0 B / 0 B 6
[root@localhost ~]# docker exec e20dd845a52a ls / //执行容器内部命令 docker exec+ID/name/别名
[root@localhost ~]# docker exec -it e20dd845a52a /bin/bash //进入容器内部执行命令操作
root@e20dd845a52a:~# //此刻在容器内部


//docker重启之后,容器默认不会随docker进程重启
[root@localhost ~]# systemctl restart docker.service
[root@localhost ~]# docker ps -a //docker重启之后,容器没有随docker进程同步启动
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e20dd845a52a wordpress:latest "docker-entrypoint..." 2 hours ago Exited (0) 12 seconds ago root_wordpress_1_c874d8f77e58
b848b9de9ae2 mysql:5.7 "docker-entrypoint..." 2 hours ago Exited (0) 2 seconds ago root_db_1_848db55d0695


//docker重启之后,容器默认随docker进程重启
[root@localhost ~]# docker run --name db --restart=always --env MYSQL_ROOT_PASSWORD=example -d mariadb //加上--restart=always docker重启之后,容器也会随docker进程同步重启
a0082e85cfbf736f2d7bb85662a76e46b275ca3eec9e69521b6b220787368517
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0082e85cfbf mariadb "docker-entrypoint..." 5 seconds ago Up 4 seconds 3306/tcp db


//为docker容器设置IP地址:
[root@localhost ~]# docker exec -it db /bin/bash
root@a0082e85cfbf:/# ping jd.com //此刻网络是不通的
bash: ping: command not found


//指定容器的hostname与IP的对应关系--add-host www.yanqi.com:192.168.1.56
[root@localhost ~]# docker run --name MyWordPress --add-host www.yanqi.com:192.168.1.56 --link db:mysql -p 8080:80 -d wordpress
9a4c8906a29ab95ae2ee6897af35c86adc163a1402a14904338fdece8025f524
[root@localhost ~]# docker exec -it MyWordPress /bin/bash
root@9a4c8906a29a:/var/www/html# cat /etc/hosts
192.168.1.56 www.yanqi.com


//服务停止时自动删除 --rm
[root@localhost ~]# docker run --name MyWordPress --rm --add-host www.yanqi.com:192.168.1.56 --link db:mysql -p 8080:80 -d wordpress
885a25898a17b1713f093f023ac98b3e03b880e7ef5246531b4cac77e9f12458
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
885a25898a17 wordpress "docker-entrypoint..." 30 seconds ago Up 30 seconds 0.0.0.0:8080->80/tcp MyWordPress
[root@localhost ~]# docker stop MyWordPress //容器停止后,docker ps -a 容器会自动删除,查看不到
MyWordPress
[root@localhost ~]# docker ps -a

二、多容器管理:docker-compost

docker提倡理念是“一个容器一个进程”,假设一个服务需要由多个进程组成,就需要多个容器组成一个系统,相互分工和配合对外提供完整的服务

比如:博客系统

  • 组件1:mariadb

  • 组件2:WordPress 的 apache web

在启动容器时,同一台主机下如果两个容器之间需要由数据交流,使用--link选项建立两个容器之间的互联,前提是建立mariadb已经启动

docker start db 
docker start MywordPress
停止:
docker stop db MywordPress 或 docker stop MywordPress 在docker stop db

docker-compose install 

容器编排工具,允许用户在一个模板(YAML格式)中定义一组相关联的容器,会根据--link等参数

符容器的优先级进行排序

//docker-compse下载地址:
curl -L https://github.com/docker/compost/releases/download/1.14.0/docker-compse-uname-s -uname -m > /usr/local/bin/docker-compose
//下载docker-compse配置文件
//上传到/usr/local/bin/目录下
[root@localhost ~]# mv docker-compose /usr/local/bin/
[root@localhost ~]# chmod a+x /usr/local/bin/docker-compose
[root@localhost ~]# docker-compose --version
docker-compose version 1.23.1, build b02f1306
//docker-compose用法
-f //指定使用的yaml文件位置
ps //显示所有容器信息
restart //重新启动容器
logs //查看日志信息
config -q //验证yaml配置文件是否正确
stop //停止容器
start //启动容器;目前容器已经成为容器,启动
up -d //启动容器姓名;目前镜像还未转换成容器;转换为容器
pause //暂停容器
unpause //恢复暂停
rm //删除容器

docker-compose yml演示:docker-compose yml文件

[root@localhost ~]# vim wordpress.yaml
version: '2'


services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress


wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
[root@localhost ~]# mv wordpress.yaml docker-compose.yaml
[root@localhost ~]# docker-compose up -d
Creating network "root_default" with the default driver
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
6ec7b7d162b2: Already exists
Creating root_db_1_ff0e170e8e51 ... done
Creating root_wordpress_1_d9be77414585 ... done
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63b42d67206c wordpress:latest "docker-entrypoint..." 2 minutes ago Up 2 minutes 0.0.0.0:8000->80/tcp root_wordpress_1_4d788639c1ba
8792d83ffa3e mysql:5.7 "docker-entrypoint..." 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp root_db_1_6e3eaf62dbab
[root@localhost ~]# docker-compose logs

END




声明:JavaBBS论坛主要用于IT技术专题的交流学习,为开源技术爱好者提供广泛、权威的技术资料。若您在技术专题有更好的想法或者建议,欢迎交流!!!



推荐阅读

Recommended reading

 







JavaBBS



Git











  






https://www.javabbs.cn/git






  JavaBBS大数据






→ 






https://www.javabbs.cn





/dsj





  JavaBBS云存储






→  https://www.javabbs.cn






/ycc







  JavaBBS数据库













  https://www.javabbs.cn






/sjk







  JavaBBS云计算













  https://www.javabbs.cn






/yjs







  JavaBBSIT.Log













https://www.javabbs.cn






/itl






  JavaBBSNginx













  https://www.javabbs.cn






/ngx






  JavaBBSzabbix













https://www.javabbs.cn






/zbx






  JavaBBSJavaSE













https://www.javabbs.cn






/jse







  JavaBBS社区文章













https://www.javabbs.cn






/bwz






  JavaBBS社区资料













https://www.javabbs.cn






/bzl






文章转载自Java BBS,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论