linux docker的使用
安装软件yum install docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpmdocker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpmsystemctl start docker状态信息[root@foundation15 mnt]# dockerinfoContain...
安装软件
yum install docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
systemctl start docker
状态信息
[root@foundation15 mnt]# docker info
Containers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 2
Server Version: 17.03.1-ce
Storage Driver: overlay
Backing Filesystem: xfs
Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-514.el7.x86_64
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.745 GiB
Name: foundation15.ilt.example.com
ID: K4NQ:2YBG:O3ER:GGOI:E6VP:6GUR:ORRF:GEPT:Y47X:XPJM:QIML:VKEI
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
测试
导入本地镜像
docker load -i game2048.tar
创建容器使用镜像
docker run -d --name vm1 game2048
**
基本操作指令
**
删除容器
[root@foundation15 mnt]# docker stop vm1
vm1
[root@foundation15 mnt]# docker rm vm1
vm1
[root@foundation15 mnt]# docker inspect vm1
[]
常用命令
run
docker run :创建一个新的容器并运行一个命令
start/stop/restart
docker start :启动一个或多少已经被停止的容器
docker stop :停止一个运行中的容器
docker restart :重启容器
kill
docker kill :杀掉一个运行中的容器。
rm
docker rm :删除一个或多少容器
pause/unpause
docker pause :暂停容器中所有的进程。
docker unpause :恢复容器中所有的进程。
create
docker create :创建一个新的容器但不启动它
exec
docker exec :在运行的容器中执行命令
容器操作
ps
docker ps : 列出容器
inspect
docker inspect : 获取容器/镜像的元数据。
top
docker top :查看容器中运行的进程信息,支持 ps 命令参数。
attach
docker attach :连接到正在运行中的容器。
events
docker events : 从服务器获取实时事件
logs
docker logs : 获取容器的日志
wait
docker wait : 阻塞运行直到容器停止,然后打印出它的退出代码。
export
docker export :将文件系统作为一个tar归档文件导出到STDOUT。
port
docker port :列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。
容器rootfs命令
commit
docker commit :从容器创建一个新的镜像。
cp
docker cp :用于容器与主机之间的数据拷贝。
diff
docker diff : 检查容器里文件结构的更改。
镜像仓库
login
docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
pull
docker pull : 从镜像仓库中拉取或者更新指定镜像
push
docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
search
docker search : 从Docker Hub查找镜像
本地镜像管理
images
docker images : 列出本地镜像。
rmi
docker rmi : 删除本地一个或多少镜像。
tag
docker tag : 标记本地镜像,将其归入某一仓库。
build
docker build : 使用Dockerfile创建镜像。
history
docker history : 查看指定镜像的创建历史。
save
docker save : 将指定镜像保存成 tar 归档文件。
import
docker import : 从归档文件中创建镜像。
info|version
info
docker info : 显示 Docker 系统信息,包括镜像和容器数。。
version
docker version :显示 Docker 版本信息。
# 基本信息查看
docker version # 查看docker的版本号,包括客户端、服务端、依赖的Go等
docker info # 查看系统(docker)层面信息,包括管理的images, containers数等
docker pull centos 下载
docker images [ centos ] 查看
docker run -i -t centos /bin/bash
2、镜像的获取与容器的使用
# 搜索镜像
docker search <image> # 在docker index中搜索image
# 下载镜像
docker pull <image> # 从docker registry server 中下拉image
# 查看镜像
docker images: # 列出images
docker images -a # 列出所有的images(包含历史)
docker rmi <image ID>: # 删除一个或多个image
# 使用镜像创建容器
docker run -i -t sauloal/ubuntu14.04
docker run -i -t sauloal/ubuntu14.04 /bin/bash # 创建一个容器,让其中运行 bash 应用,退出后容器关闭
docker run -itd --name centos_aways --restart=always centos #创建一个名称centos_aways的容器,自动重启
# --restart参数:always始终重启;on-failure退出状态非0时重启;默认为,no不重启
# 查看容器
docker ps :列出当前所有正在运行的container
docker ps -l :列出最近一次启动的container
docker ps -a :列出所有的container(包含历史,即运行过的container)
docker ps -q :列出最近一次运行的container ID
# 再次启动容器
docker start/stop/restart <container> #:开启/停止/重启container
docker start [container_id] #:再次运行某个container (包括历史container)
#进入正在运行的docker容器
docker exec -it [container_id] /bin/bash
docker run -i -t -p <host_port:contain_port> #:映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。
# 删除容器
docker rm <container...> #:删除一个或多个container
docker rm `docker ps -a -q` #:删除所有的container
docker ps -a -q | xargs docker rm #:同上, 删除所有的container
docker run 和 docker create 参数基本一样,run是创建容器并后台启动,create是只创建容器。
docker run 相当于docker create 和 docker start
run创建容器:docker run -itd
create创建: docker create -it
-t, --tty Allocate a pseudo-TTY
-i, --interactive Keep STDIN open even if not attached
-d, --detach Run container in background and print container ID #run的参数
容器资源限制参数
-m 1024m --memory-swap=1024m # 限制内存最大使用(bug:超过后进程被杀死)
--cpuset-cpus="0,1" # 限制容器使用CPU
docker容器随系统自启参数
docker run –restart=always redis
no – 默认值,如果容器挂掉不自动重启
on-failure – 当容器以非 0 码退出时重启容器
同时可接受一个可选的最大重启次数参数 (e.g. on-failure:5).
always – 不管退出码是多少都要重启
docker run -itd --name test01 -p IP:sport:dport -m 1024m --memory-swap=1024m --cpuset-cpus="0,1" --restart=always <image ID>
docker exec -it test01 bash # 进入容器也可以用exec命令
1
2
查看容器状态信息
[root@localhost ~]# docker stats
[root@localhost ~]# docker stats --no-stream
一些使用技巧
docker文件存放目录
Docker实际上把所有东西都放到/var/lib/docker路径下了。
[root@localhost docker]# ls -F
containers/ devicemapper/ execdriver/ graph/ init/ linkgraph.db repositories-devicemapper volumes/
containers目录当然就是存放容器(container)了,graph目录存放镜像,文件层(file system layer)存放在graph/imageid/layer路径下,这样我们就可以看看文件层里到底有哪些东西,利用这种层级结构可以清楚的看到文件层是如何一层一层叠加起来的。
**
搭建阿里云容器仓库来下载镜像
**
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://go021fkd.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
测试下载nginx
#######################################################
[root@foundation15 mnt]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 9307 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... 1385 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 609 [OK]
jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as... 396 [OK]
kong Open-source Microservice & API Management ... 215 [OK]
webdevops/php-nginx Nginx with PHP-FPM 111 [OK]
kitematic/hello-world-nginx A light-weight nginx container that demons... 108
zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server ... 62 [OK]
bitnami/nginx Bitnami nginx Docker Image 57 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 43 [OK]
linuxserver/nginx An Nginx container, brought to you by Linu... 38
tobi312/rpi-nginx NGINX on Raspberry Pi / armhf 20 [OK]
blacklabelops/nginx Dockerized Nginx Reverse Proxy Server. 12 [OK]
nginxdemos/nginx-ingress NGINX Ingress Controller for Kubernetes . ... 11
wodby/drupal-nginx Nginx for Drupal container image 10 [OK]
webdevops/nginx Nginx container 8 [OK]
nginxdemos/hello NGINX webserver that serves a simple page ... 8 [OK]
centos/nginx-18-centos7 Platform for running nginx 1.8 or building... 7
centos/nginx-112-centos7 Platform for running nginx 1.12 or buildin... 4
1science/nginx Nginx Docker images that include Consul Te... 4 [OK]
pebbletech/nginx-proxy nginx-proxy sets up a container running ng... 2 [OK]
travix/nginx NGinx reverse proxy 1 [OK]
toccoag/openshift-nginx Nginx reverse proxy for Nice running on sa... 1 [OK]
ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 0 [OK]
mailu/nginx Mailu nginx frontend 0 [OK]
[root@foundation15 mnt]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
be8881be8156: Pull complete
32d9726baeef: Pull complete
87e5e6f71297: Pull complete
Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
Status: Downloaded newer image for nginx:latest
**
挂载本地目录到容器
**
docker run -it --name vm1 -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/yum.repo:/etc/yum.reporo rhel7 bash
bash-4.2# cd /data
data1/ data2/
bash-4.2# cd /data1
bash-4.2# ls
bash-4.2# cd ..
bash-4.2# cd data2
bash-4.2# touch file
touch: cannot touch 'file': Read-only file system
bash-4.2# cd /etc/yum.repo
yum.repo/ yum.repos.d/
bash-4.2# cd /etc/yum.repo/
bash-4.2# ls
yum.repo
这种方式比较麻烦 可以制作一个公共的挂载容器来让其他容器使用
###################################################################
[root@foundation15 mnt]# docker create --name datavol -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/yum.repo:/etc/yum.repo/yum.repo:ro rhel7 bash
[root@foundation15 mnt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae88e068bfb4 rhel7 "bash" 9 seconds ago Created datavol
其他容器使用功用容器来实现挂载
[root@foundation15 mnt]# docker run -it --name vm1 --volumes-from datavol rhel7 bash
bash-4.2# cd /data2
bash-4.2# touch filke
touch: cannot touch 'filke': Read-only file system
bash-4.2# cat /etc/yum.repo/yum.repo
[source]
name=source7
baseurl=file:///home/kiosk/Desktop/ipython
gpgcheck=0
[source7.3]
name=source7.3
baseurl=file:///mnt/rhel7
gpgcheck=0
bash-4.2#
**
数据备份
**
[root@foundation15 mnt]# docker run --rm -v /tmp/backup:/backup ubuntu tar cf /backup/etc.tar /etc
tar: Removing leading `/' from member names
[root@foundation15 mnt]# cd /tmp/backup/
[root@foundation15 backup]# ls
etc.tar
**
docker的四种网络模式
**
Docker在创建容器时有四种网络模式,bridge为默认不需要用–net去指定,其他三种模式需要在创建容器时使用–net去指定。
bridge模式,使用–net=bridge指定,默认设置。
none模式,使用–net=none指定。
host模式,使用–net=host指定。
container模式,使用–net=container:容器名称或ID指定
bridge模式:docker网络隔离基于网络命名空间,在物理机上创建docker容器时会为每一个docker容器分配网络命名空间,并且把容器IP桥接到物理机的虚拟网桥上。
none模式:此模式下创建容器是不会为容器配置任何网络参数的,如:容器网卡、IP、通信路由等,全部需要自己去配置。
host模式:此模式创建的容器没有自己独立的网络命名空间,是和物理机共享一个Network Namespace,并且共享物理机的所有端口与IP,并且这个模式认为是不安全的。
container模式:此模式和host模式很类似,只是此模式创建容器共享的是其他容器的IP和端口而不是物理机,此模式容器自身是不会配置网络和端口,创建此模式容器进去后,你会发现里边的IP是你所指定的那个容器IP并且端口也是共享的,而且其它还是互相隔离的,如进程等。
docker网络初始化的过程如下:
初始化设备 —> 初始化bridge —> 初始化iptables —> 初始化ip foward(内核路由转发) — > register network job function —> end
桥接模式
在bridge模式下,连在同一网桥上的容器可以相互通信(如果为了安全考虑,也可以设置禁止它们通信),容器也可以与外部通信,数据包从容器出来,由于容器是桥接到docker0上,所以数据包会发到docker0上,查看iptables的策略,会发现有一个策略,将源地址从172.17.0.1的包进行源地址转换,转化成宿主机的网卡地址,(注意ip foward功能要开启)因此只要宿主机可以与外部通信,那么容器就可以与外部通信。
Bridge 桥接模式的实现步骤如下:
1 Docker Daemon 利用 veth pair 技术,在宿主机上创建两个虚拟网络接口设备,假设为veth0和veth1。而 veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。
2 Docker Daemon 将 veth0 附加到 Docker Daemon 创建的 docker0 网桥上。保证宿主机的网络报文可以发往 veth0
3 Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为 eth0。如此一来,保证宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,实现宿主机到Docker Container 网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网络环境的隔离性。
bridge 桥接模式下的 Docker Container 在使用时,并非为开发者包办了一切。最明显的是,该模式,Docker Container 不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网段。导致的结果是宿主机以外的世界不能直接和容器进行通信。虽然 NAT 模式经过中间处理实现了这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争端口,容器内部服务的访问者需要使用服务发现获知服务的外部端口等。另外 NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。
root@foundation6 ~]# docker run -d --name web1 nginx
90bf8ed3e5b93011d17ad3a8fe055858e75b16773de0f72dcf5c1519133a4d7c
##使用docker镜像nginx:latest 以 后台模式启动一个容器,并将容器命名为web1,-d打入后台,并返回容器ID,--name 指定容器名称
[root@foundation6 ~]# docker run -d --name web2 -p 8000:80 nginx
6b9a27a9a78b1f4276337776b3401f11f9b52eaa096fea673e67b4c7439bbc08
## 使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到宿主机的8080端口,即当访问宿主机的8000端口时会转到容器的80端口,也就是nginx的界面
-p进行了端口映射,将容器web2的80端口映射到宿主机的8000端口,进行完该操作查看iptables会发现多了一条策略
[root@foundation6 ~]# iptables -t nat -nL
....
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8000 to:172.17.0.3:80
[root@foundation6 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b9a27a9a78b nginx "nginx -g 'daemon off" 7 seconds ago Up 4 seconds 443/tcp, 0.0.0.0:8000->80/tcp web2
90bf8ed3e5b9 nginx "nginx -g 'daemon off" 5 minutes ago Up 5 minutes 80/tcp, 443/tcp web1
host 模式是 bridge 桥接模式很好的补充。采用 host 模式的 Docker Container,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换。当然,有这样的方便,肯定会损失部分其他的特性,最明显的是 Docker Container 网络环境隔离性的弱化,即容器不再拥有隔离、独立的网络栈。另外,使用 host 模式的 Docker Container 虽然可以让容器内部的服务和传统情况无差别、无改造的使用,但是由于网络隔离性的弱化,该容器会与宿主机共享竞争网络栈的使用;另外,容器内部将不再拥有所有的端口资源,原因是部分端口资源已经被宿主机本身的服务占用,还有部分端口已经用以 bridge 网络模式容器的端口映射。
root@foundation6 ~]# docker run -it --name web4 --net host ubuntu
##使用镜像ubuntu以交互式运行一个容器,-i 指运行交互式,-t 为容器重新分配一个伪终端,--name 为容器指定名称为web4,--net指定容器的网络连接类型,这里指定的是host模式
root@foundation6:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
.......
[root@foundation6 ~]# docker exec web3 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
##web3 和web4使用的是桥接模式,会直接使用宿主机的网络
none模式
网络环境为 none,即不为 Docker Container 任何的网络环境。一旦 Docker Container 采用了none 网络模式,那么容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。可以说 none 模式为 Docker Container 做了极少的网络设定,在没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制开发。这也恰巧体现了 Docker 设计理念的开放。
在 none 网络模式下分配固定 ip:
netns 是在 linux 中提供网络虚拟化的一个项目,使用 netns 网络空间虚拟化可以在本地虚拟化出多个网络环境,目前 netns 在 lxc 容器中被用来为容器提供网络。使用 netns 创建的网络空间独立于当前系统的网络空间,其中的网络设备以及 iptables 规则等都是独立的,就好像进入了另外一个网络一样。
搭建none模式
docker run -it --name vm2 --net none ubuntu bash
docker ps
ip link add name veth2 type veth peer name veth3 创建 链接
brctl addif docker0 veth2 (绑定网络一端)
brctl show
mkdir /var/run/netns
docker inspect -f '{{.State.Pid}}' vm2##### 查看年vm2所对应的id
ln -s /proc/13316/ns/net /var/run/netns/13316
ip link set veth3 netns 13316 将vm2与网络绑定(容器绑定另一端)
#################################################################
容器内查看ip
root@67ea149b3c5e:/# ip addr
56: veth3@if57: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether fa:22:e8:08:c4:a7 brd ff:ff:ff:ff:ff:ff
#######################################################
######################################################################
ip netns exec 13316 ip link set veth1 name eth0(容器内改名)
root@67ea149b3c5e:/# ip addr
56: eth0@if57: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether fa:22:e8:08:c4:a7 brd ff:ff:ff:ff:ff:ff
##################################################################
ip netns exec 13316 ip link set eth0 up(开启)
######################################################################
ip netns exec 13316 ip addr add 172.17.0.100/24 dev eth0 (添加ip)
root@67ea149b3c5e:/# ip addr
56: eth0@if57: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether fa:22:e8:08:c4:a7 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.100/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::f822:e8ff:fe08:c4a7/64 scope link
valid_lft forever preferred_lft forever
#################################################################3
ip netns exec 13316 ip route add default via 172.17.0.1(设定网关)
root@67ea149b3c5e:/# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.17.0.1 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
root@67ea149b3c5e:/# ping 172.25.15.250
\PING 172.25.15.250 (172.25.15.250) 56(84) bytes of data.
64 bytes from 172.25.15.250: icmp_seq=1 ttl=64 time=0.054 ms
64 bytes from 172.25.15.250: icmp_seq=2 ttl=64 time=0.122 ms
64 bytes from 172.25.15.250: icmp_seq=3 ttl=64 time=0.124 ms
64 bytes from 172.25.15.250: icmp_seq=4 ttl=64 time=0.052 ms
root@67ea149b3c5e:/# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.099 ms
64 bytes from 172.17.0.1: icmp_seq=3 ttl=64 time=0.122 ms
ping baidu测试 成功
root@67ea149b3c5e:/# ping www.baidu.com
PING www.a.shifen.com (183.232.231.173) 56(84) bytes of data.
64 bytes from 183.232.231.173: icmp_seq=1 ttl=51 time=78.6 ms
64 bytes from 183.232.231.173: icmp_seq=2 ttl=51 time=73.3 ms
64 bytes from 183.232.231.173: icmp_seq=3 ttl=51 time=106 ms
64 bytes from 183.232.231.173: icmp_seq=4 ttl=51 time=71.9 ms
64 bytes from 183.232.231.173: icmp_seq=5 ttl=51 time=113 ms
64 bytes from 183.232.231.173: icmp_seq=6 ttl=51 time=126 ms
**
容器间互相连通
**
[root@foundation15 backup]# docker run -d --name vm1 -p 8080:80 nginx
2b1b00a4e6a7710a804a72ec459e064b6c01022acf20ec4524e51bb4bdc92f1d
[root@foundation15 backup]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b1b00a4e6a7 nginx "nginx -g 'daemon ..." 4 seconds ago Up 3 seconds 0.0.0.0:8080->80/tcp vm1
建立nginx容器 容器80与主机8080端口连通
##############################################################
查看iptable策略
[root@foundation15 backup]# iptables -t nat -nL
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.2:80
################################################################
#############################################################
建立第二个容器与nginx容器连通
[root@foundation15 backup]# docker run -it --name vm2 --link vm1:nginx ubuntu
root@4dacb5da56e4:/# ping nginx 测试是否连通
PING nginx (172.17.0.2) 56(84) bytes of data.
64 bytes from nginx (172.17.0.2): icmp_seq=1 ttl=64 time=0.088 ms
64 bytes from nginx (172.17.0.2): icmp_seq=2 ttl=64 time=0.103 ms
^C
--- nginx ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.088/0.095/0.103/0.012 ms
##################################################################
**
自行搭建镜像
**
#################################################
[root@foundation15 backup]# docker run -it --name vm4 rhel7 bash
修改原有的rhel7 重新封装即可
添加yum文件
[source7.3]
name=source7.3
baseurl=http://172.25.15.250/rhel7
gpgcheck=0
下载httpd即可
######################################################
####################################################
在主机端 mkdir /tmp/docker
编辑Dockerfile
FROM rhel7
ENV HOSTNAME server1
EXPOSE 80
COPY yum.repo /etc/yum.repos.d/yum.repo
RUN rpmdb --rebuilddb&& yum install httpd -y &&yum clean all
VOLUME ["/var/www/html"]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
###########################################################
在docker目录下同样创建yum文件即可
[root@foundation15 docker]# ls
Dockerfile web yum.repo
#################################################################
#############################################################3
开始build
[root@foundation15 docker]# docker build -t rhel7:v1 .
Sending build context to Docker daemon 4.608 kB
Step 1/7 : FROM rhel7
---> 0a3eb3fde7fd
Step 2/7 : ENV HOSTNAME server1
---> Using cache
---> 0e674bd2b30c
Step 3/7 : EXPOSE 80
---> Using cache
---> 23bbc5bd99d3
Step 4/7 : COPY yum.repo /etc/yum.repos.d/yum.repo
---> Using cache
---> 173d8ff79728
Step 5/7 : RUN rpmdb --rebuilddb&& yum install httpd -y &&yum clean all
---> Running in d0787ea709bc
Skipping unreadable repository '///etc/yum.repos.d/rhel7.repo'
Complete!
Skipping unreadable repository '///etc/yum.repos.d/rhel7.repo'
Cleaning repos: source7.3
Cleaning up everything
---> 201102f566d3
Removing intermediate container d0787ea709bc
Step 6/7 : VOLUME /var/www/html
---> Running in d952d9958459
---> f8d6246b9dd6
Removing intermediate container d952d9958459
Step 7/7 : CMD /usr/sbin/httpd D FOREGROUND
---> Running in 52b72702ace2
---> 94788e1d8543
Removing intermediate container 52b72702ace2
Successfully built 94788e1d8543
[root@foundation15 docker]# docker build -t rhel7:v1 .
Sending build context to Docker daemon 4.608 kB
Step 1/7 : FROM rhel7
---> 0a3eb3fde7fd
Step 2/7 : ENV HOSTNAME server1
---> Using cache
---> 0e674bd2b30c
Step 3/7 : EXPOSE 80
---> Using cache
---> 23bbc5bd99d3
Step 4/7 : COPY yum.repo /etc/yum.repos.d/yum.repo
---> Using cache
---> 173d8ff79728
Step 5/7 : RUN rpmdb --rebuilddb&& yum install httpd -y &&yum clean all
---> Using cache
---> 201102f566d3
Step 6/7 : VOLUME /var/www/html
---> Using cache
---> f8d6246b9dd6
Step 7/7 : CMD /usr/sbin/httpd D FOREGROUND
---> Using cache
---> 94788e1d8543
Successfully built 94788e1d8543
##################################################################3
[root@foundation15 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rhel7 v1 94788e1d8543 6 minutes ago
成功
#####################################################################
#########################################################333
用镜像创建虚拟机
[root@foundation15 docker]# docker run -d --name vm6 rhel7:v1
def93d3cf90de7449bda256d9849016e61f3838c8acf19345d578d71fc07af2c
[root@foundation15 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
def93d3cf90d rhel7:v1 "/usr/sbin/httpd -..." 3 seconds ago Up 2 seconds 80/tcp vm6
################################################################3
浏览器测试即可
更多推荐
所有评论(0)