三、docker 容器

三、容器

创建容器常用选项 docker run …

docker create创建完之后不启动
docker run生成一个容器 & 启动
docker run -itd交互、伪终端、后台运行
docker ps查看运行着的容器 ps -a 看所有,ps -l 查看最新容器
–add-host list

例1:(1)生成一个容器,名字随意,不带–add-host参数。
这里写图片描述
docker ps
这里写图片描述

docker exec fervent_ritchie cat /etc/hosts

这里写图片描述
(2) 生成一个容器,名字随意,带–add-host 参数

docker run -itd --add-host  abc:192.168.1.123  ubuntu

这里写图片描述

这里写图片描述

–cap-add添加linux特性到容器
–cid-file /tmp/a.txt将容器ID保存到文件中
docker run –cidfile /tmp/a.txt ubuntu保存容器的pid 到一个文件中,方便统一管理
–dns 8.8.8.8docker run -itd –dns 8.8.8.8 ubuntu
-e和–env-file将环境变量写到文件中 docker run -itd -e TEST=123 ubuntu
–expose 3306docker run -itd –expose 80 ubuntu ,docker ps -l 查看
-h hostnamedocker run -itd ubuntu ,随机生成一个容器,hostname也是随机生成的(hostname = 容器ID),如下:

这里写图片描述
如果我想自定义指定,docker run -itd -h songyt ubuntu。

【–ip】可以制定IP,但是必须在网段范围内
docker network create –subnet=10.0.0.0/16 network_10先建个网段
docker network ls查看所有网段

这里写图片描述
docker run -itd –net=network_10 –ip 10.0.0.123 ubuntu
docker ps -l
这里写图片描述
docker inspect keen_heisenberg #能看到如下信息表示配置成功。
这里写图片描述

–link #添加host记录,根据已有hostname的关联一下
docker run -itd -h songyt ubuntu
这里写图片描述

重新生成一个容器c_b,关联下
这里写图片描述
c_a IP是0.7,c_b 是0.8
–log-driver (none,name,json,syslog,fluentd…)
#指定日志位置
elk专业日志分析工具
docker run -itd –name c_c –log-driver syslog ubuntu
tail -f /var/log/syslog #容器中的日志都会到宿主机的此文件中
–log-opt
–oom-kill-disable
-p 宿主机端口:容器端口
-P
expose
restart always/
restart on-failiure:3
ulimit #修改最大描述符
docker run -itd –name c_d –ulimit nproc=10240 –ulimit nofile=65535 ubuntu
docker attach c_d
ulimit -a 确认
-v 数据持久化
–volumes-from list
-w #进入容器后所在的工作目录
–cpu-period int
–cpu-quota int
-c –cpu-shares int
–cpuset-cpus
–device-read-bps list
–device-read-iops list
–device-write-iops list
-m –memory bytes #限制内存
–memory-reservation bytes
–memory-swap bytes
–memory-swappiness int
–storage-opt list #限制磁盘空间只支持devicemapper存储驱动
docker run -itd –name c_e -m 10240000 ubuntu
docker attach c_e
cd /sys/fs/cgroup
cat memory.limit _in_bytes
grep 上次输出的值 *
free -m
exit
mount #创建一个容器的时候,默认从宿主机上挂载3个文件,/etc/resove.conf,/etc/hostname,/etc/hosts,每次重启,都挂载一次
–net docker run -itd –net host ubuntu
docker inspect cID

管理命令 docker …

运行场景:是在容器生成后,进行的管理操作
基本命令

start、stop启动、关闭
attach
rmdocker rm -f $(docker ps -qa) 删除所有的容器
kill休眠
pause、unpause
renamedocker rename c_a c_b
inspect查看所有
exec体会不同:
docker exec c_a ls
docker exec -it c_a ls交互式地输出到标准输出,等同于下面
docker exec -it c_a /bin/bash
top显示容器中运行的进程 docker top c_a
portdocker port c_a
cp在 宿主机与容器之间,相互copy 文件
docker cp a.txt c_a:/home; docker exec -it c_a ls /home
..docker cp c_a:/z.txt /tmp
diff
logs dockerlogs c_a
stats动态查看 容器利用率 ,交互式打印用docker stats –no-stream c_a
update容器生成后修改一些配置 docker update –help
eventsdocker events; 不针对具体docker容器,针对整个docker,可指定时间

数据持久化

数据卷

即:将宿主机目录挂载到容器目录
特点:
这里写图片描述
例子:
(1) 假设宿主机/container_data/web 没有数据,现在挂载下:

docker run -itd --name web01 -v /container_data/web:/data ubuntu

在/container_data/web 下:touch a.txt

docker exec web01 ls /data  

(2) 假设宿主机有数据时挂载,容器里也会有数据
接着(1)的操作:

docker run -itd --name web02 -v /container_data/web:/data ubuntu
docker exec web02 ls /data 也是有数据的
容器数据卷

即:将一个运行的容器作为数据卷,让其他容器 通过挂载这个容器 实现数据共享。
运行着的容器(需要先共享出一个数据卷):

docker run -itd --name share  -v /data ubuntu            #把容器的/data 目录作为共享卷
docker run -itd --name oa --volumes-from share  ubuntu   #oa容器挂载share容器
在共享的share容器里创建:docker exec share  touch /data/index.php
docker exec share ls /data       #确认下共享目录是否创建成功
docker exec oa   ls /data        #到新建的oa的/data/ 下看是否同步了过来

ps:容器 共享出去的目录是双方同步的,类似于百度云盘的共享目录。
搭建lnmp网站平台

创建mysql数据库容器

1.  访问:hub.docker.com/explore
2.  docker run -itd --name lnmp_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql --character-set-server=utf8
3.  telnet 127.0.0.1 3306    #可以ping通
4.  iptables -t nat -vnL      #其实是在防火墙里添加了条规则,肯最后一行
5.  docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"'

创建PHP环境容器

1.  docker search php    #选第一个
2.  docker run -itd --name lnmp_web --link lnmp_mysql:db -p 88:80 -v /container_data/web:/var/www/html richarvey/nginx-php-fpm
3.  在宿主机/container_data/web/ 下创建index.php <?php phpinfo() ?> 

在浏览器访问:IP:88 #访问不到

iptables -A input -s 宿主机Ip -j accept   #将iptables规则清空,再重置了下IP规则

以wordpress博客为例调试

wget  https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz
tar zxvf wordpress-4.7.4-zh_CN.tar.gz
mv wordpress/*  /container_data/web/

这里写图片描述

浏览器测试访问: http:IP:88

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值