一、docker基础概念及命令
docker三个重要概念:仓库/Repository;镜像/image;容器/Containerdocker 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 infoStorage Driver: overlay //重点overlay比dm更稳定[root@localhost ~]# docker search nginxNAME DESCRIPTION STARS OFFICIAL AUTOMATEDnginx Official build of Nginx. 14185 [OK] //官方镜像[root@localhost ~]# docker pull nginxUsing default tag: latest //latest 默认的latest: Pulling from library/nginx[root@localhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 f07dfa83b528 Less than a second ago 448 MBnginx latest ae2feff98a0c 20 hours ago 133 MBhello-world latest bf756fb1ae65 11 months ago 13.3 kB注://镜像大小占用多少存储资源:镜像的size值相加是不正确的,只能通过df来查看;//镜像是分层的,如果有使用镜像,就会跳出下载;使用公用镜像;公用显示的是源镜像大小;size显示的是大于或者等于镜像存储单位的,万一一个公用镜像都没有。[root@localhost ~]# docker rmi hello-world:latest[root@localhost ~]# docker rmi bf75Untagged: 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号,63b42d67206c8792d83ffa3e[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-truncCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe20dd845a52a04290bb9868b19528207010110fdbeebf079ccca36b13a564e5b 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 PIDSe20dd845a52a 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 NAMESe20dd845a52a wordpress:latest "docker-entrypoint..." 2 hours ago Exited (0) 12 seconds ago root_wordpress_1_c874d8f77e58b848b9de9ae2 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 psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa0082e85cfbf mariadb "docker-entrypoint..." 5 seconds ago Up 4 seconds 3306/tcp db//为docker容器设置IP地址:[root@localhost ~]# docker exec -it db /bin/bashroot@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 wordpress9a4c8906a29ab95ae2ee6897af35c86adc163a1402a14904338fdece8025f524[root@localhost ~]# docker exec -it MyWordPress /bin/bashroot@9a4c8906a29a:/var/www/html# cat /etc/hosts192.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 wordpress885a25898a17b1713f093f023ac98b3e03b880e7ef5246531b4cac77e9f12458[root@localhost ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES885a25898a17 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 dbdocker 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 --versiondocker-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.yamlversion: '2'services:db:image: mysql:5.7restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: somewordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestrestart: alwaysports:- "8000:80"environment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpress
[root@localhost ~]# mv wordpress.yaml docker-compose.yaml[root@localhost ~]# docker-compose up -dCreating network "root_default" with the default driverPulling db (mysql:5.7)...5.7: Pulling from library/mysql6ec7b7d162b2: Already existsCreating root_db_1_ff0e170e8e51 ... doneCreating root_wordpress_1_d9be77414585 ... done[root@localhost ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES63b42d67206c wordpress:latest "docker-entrypoint..." 2 minutes ago Up 2 minutes 0.0.0.0:8000->80/tcp root_wordpress_1_4d788639c1ba8792d83ffa3e 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





