本文共 44520 字,大约阅读时间需要 148 分钟。
两者的不同之处如下面2张图所示,传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
![在这里插入图片描述]( 什么是容器?两者的不同之处如下面2张图所示,传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
Docker对比传统虚拟机总结准备两台虚拟机(docker01:192.168.8.11,docker02:192.168.8.12),能访问外网
1、安装前准备[root@docker01 ~]# vim /etc/hosts //以docker01为例。下同#添加以下两行192.168.8.11 docker01192.168.8.12 docker02[root@docker01 ~]# vim /etc/yum.repos.d/dvd.repoCentos]name=Centos7.4baseurl=ftp://192.168.8.254/rhel7/enabled=1gpgcheck=0[Docker]name=Centos7.4baseurl=ftp://192.168.8.254/docker/enabled=1gpgcheck=0
2、安装并启动docker
[root@docker01 ~]# yum list |grep dockerdocker-engine.x86_64 1.12.1-1.el7.centos @Docker docker-engine-selinux.noarch 1.12.1-1.el7.centos @Docker[root@docker01 ~]# yum -y install docker-engine[root@docker01 ~]# systemctl start docker[root@docker01 ~]# systemctl enable docker[root@docker01 ~]# ifconfig docker0 //docker启动后会生成一个虚拟交换机docker0docker0: flags=4099mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
镜像常用命令
[root@docker01 ~]# docker images //查看镜像[root@docker01 ~]# docker history busybox //查看镜像制作历史(层次结构)[root@docker01 ~]# docker inspect centos:latest //查看镜像底层信息[root@docker01 ~]# docker pull centos //下载镜像[root@docker01 ~]# docker push centos //上传镜像[root@docker01 ~]# docker save busybox:latest > busybox.tar //镜像另存为tar包[root@docker02 ~]# docker load < busybox.tar //使用tar包导入镜像[root@docker01 ~]# docker search busybox //搜索镜像[root@docker01 ~]# docker tag centos:latest centos:lx //修改镜像名称和标签[root@docker01 ~]# docker rmi centos:lx //删除本地镜像
镜像命令实践
############################################################################[root@docker01 ~]# man docker search //查看docker相应命令帮助文件############################################################################[root@docker01 ~]# docker images //查看docker镜像,初始镜像为空REPOSITORY TAG IMAGE ID CREATED SIZE[root@docker01 ~]# docker search mysql //搜索mysql网络镜像NAME DESCRIPTION STARS OFFICIAL AUTOMATED //OFFICIAL值为ok时表示为官方镜像mysql MySQL is a widely used, open-source relati... 8196 [OK] mariadb MariaDB is a community-developed fork of M... 2791 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Crea... 610 [OK]percona Percona Server is a fork of the MySQL rela... 434 [OK] centurylink/mysql Image containing mysql. Optimized to be li... 60 [OK][root@docker01 ~]# docker search busybox //搜索busybox网络镜像NAME DESCRIPTION STARS OFFICIAL AUTOMATEDbusybox Busybox base image. 1589 [OK] progrium/busybox 69 [OK]radial/busyboxplus Full-chain, Internet enabled, busybox made... 24 [OK][root@docker01 ~]# docker pull busybox //下载busybox网络镜像Using default tag: latestlatest: Pulling from library/busybox53071b97a884: Pull complete Digest: sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3dStatus: Downloaded newer image for busybox:latest[root@docker01 ~]# docker images //查看下载镜像REPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 64f5d945efcc 2 weeks ago 1.199 MB[root@docker01 ~]# ls[root@docker01 ~]# docker save busybox:latest > busybox.tar //备份docker镜像[root@docker01 ~]# lsbusybox.tar[root@docker01 ~]# scp busybox.tar 192.168.8.12:/root[root@docker02 ~]# docker load < busybox.tar //恢复镜像d1156b98822d: Loading layer [==================================================>] 1.416 MB/1.416 MBLoaded image: busybox:latest[root@docker02 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 64f5d945efcc 2 weeks ago 1.199 MB[root@docker01 ~]# cd docker_images/[root@docker01 docker_images]# lscentos.tar nginx.tar redis.tar registry.tar ubuntu.tar[root@docker01 docker_images]# for i in *;do docker load -i ${i};done //导入已下载镜像,docker02主机同样操作[root@docker01 docker_images]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 64f5d945efcc 2 weeks ago 1.199 MBubuntu latest 452a96d81c30 13 months ago 79.62 MBcentos latest e934aafc2206 13 months ago 198.6 MBregistry latest d1fd7d86a825 16 months ago 33.26 MBnginx latest a5311a310510 2 years ago 181.4 MBredis latest 1aa84b1b434e 2 years ago 182.8 MB
[root@docker01 ~]# docker run -itd nginx:latest //运行容器,-itd(选项分别表示交互式、运行后开启终端、后台运行)[root@docker01 ~]# docker run -it centos //运行容器后进入容器[root@f26819924bcf /]# exit //退出容器,容器自动关闭(注:ctrl+p+q可以实现退出时不关闭容器)[root@docker01 ~]# docker attach 4fcdae128d1e //进入运行中的容器(前提是容器默认启动命令支持交互如/bin/bash,exit时关闭容器,常用容器排错)[root@docker01 ~]# docker exec -it 4888e01da6b1 /bin/bash //进入运行中的容器(exit不会关闭容器,常用于容器维护)[root@docker01 ~]# docker ps //查看启动容器[root@docker01 ~]# docker ps -a //查看启动过的容器[root@docker01 ~]# docker ps -aq //查看启动过的容器ID[root@docker01 ~]# docker stop 1cf8349b9de0 //关闭容器[root@docker01 ~]# docker start 1cf8349b9de0 //启动容器[root@docker01 ~]# docker restart 1cf8349b9de0 //重启容器[root@docker01 ~]# docker inspect 1cf8349b9de0 //查看容器底层信息[root@docker01 ~]# docker top 1cf8349b9de0 //查看容器进程列表[root@docker01 ~]# docker rm 1cf8349b9de0 //删除容器(需在关闭容器后执行,否则会报错)[root@docker01 ~]# docker rm $(docker stop eec00f87a111) //删除正在运行的容器[root@docker01 ~]# for i in `docker ps -aq`; do docker rm $i;done //批量删除启动过的容器[root@docker01 ~]# docker rm $(docker ps -aq) //批量删除启动过的容器
[root@docker01 ~]# docker run -it centos:latest /bin/bash //启动容器centos[root@eac031d4b130 /]# hostname //启动容器后主机名隔离eac031d4b130[root@eac031d4b130 yum.repos.d]# ifconfig //容器中无config命令,配置yum安装bash: ifconfig: command not found[root@eac031d4b130 /]# cd /etc/yum.repos.d/[root@eac031d4b130 yum.repos.d]# lsCentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repoCentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo[root@eac031d4b130 yum.repos.d]# rm -rf *[root@eac031d4b130 yum.repos.d]# vi /etc/yum.repos.d/dvd.repo[Centos]name=Centos7.4baseurl=ftp://192.168.8.254/rhel7/enabled=1gpgcheck=0[root@eac031d4b130 yum.repos.d]# yum provides ifconfig //查看ifconfig命令安装包Loaded plugins: fastestmirror, ovlCentos | 4.1 kB 00:00:00 (1/2): Centos/group_gz | 137 kB 00:00:00 (2/2): Centos/primary_db | 4.0 MB 00:00:00 Determining fastest mirrorsCentos/filelists_db | 3.4 MB 00:00:00 net-tools-2.0-0.22.20131004git.el7.x86_64 : Basic networking toolsRepo : CentosMatched from:Filename : /sbin/ifconfig[root@eac031d4b130 yum.repos.d]# yum -y install net-tools //安装ifconfig命令安装包[root@eac031d4b130 yum.repos.d]# ifconfig eth0: flags=4163mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0 //启动容器后网络隔离[root@docker01 ~]# ifconfig //对比容器网络docker0: flags=4163 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0[root@eac031d4b130 /]# ls /anaconda-post.log bin dev etc home lib lib64 //启动容器后文件系统隔离media mnt opt proc root run sbin srv sys tmp usr var[root@docker01 ~]# ls / //对比容器根目录bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var[root@eac031d4b130 /]# pstree //启动容器后进程信息向量隔离bash---pstree[root@docker01 ~]# pstree //对比容器进程信息向量[root@eac031d4b130 /]# cat /etc/passwd //启动容器后用户隔离[root@docker01 ~]# cat /etc/passwd //对比容器用户##############################################################################[root@docker01 ~]# docker run -it busybox:latest /bin/bash //busybox容器中无/bin/bash命令,启动容器失败[root@docker01 ~]# docker run -it busybox:latest /bin/sh //busybox容器中默认启动命令为/bin/sh[root@docker01 ~]# docker run -it centos:latest //按默认启动命令启动centos容器[root@40f027323b25 /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 13:14 ? 00:00:00 /bin/bash //centos容器中默认启动命令为/bin/bashroot 13 1 0 13:14 ? 00:00:00 ps -ef[root@docker01 ~]# docker ps //开启另一个终端,查看启动的容器
启动一个centos容器,安装apache,设置默认首页为hello world!
[root@docker01 ~]# docker run -it centos[root@f3a71d377ef0 ~]# vi /etc/yum.repos.d/dvd.repo[rhel7]name=rhel7baseurl=ftp://192.168.8.254/rhel7enabled=1gpgcheck=0[root@f3a71d377ef0 ~]# yum -y install httpd vim[root@f3a71d377ef0 ~]# cd /var/www/html/[root@f3a71d377ef0 html]# vim index.htmlhello world![root@f3a71d377ef0 html]# systemctl start httpd //容器中无systemd命令,启动httpd报错[root@f3a71d377ef0 html]# cat /usr/lib/systemd/system/httpd.service //查看手动启动httpd命令...[Service]Type=notifyEnvironmentFile=/etc/sysconfig/httpdExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND...[root@f3a71d377ef0 html]# /usr/sbin/httpd $OPTIONS -DFOREGROUND //手动启动centos容器中的httpd服务[root@docker01 ~]# curl 172.17.0.2 //宿主机访问centos容器httpd服务hello world!
启动一个nginx容器
[root@docker01 ~]# docker run -itd nginx[root@docker01 ~]# docker ps //查看nginx容器id[root@docker01 ~]# docker exec -it 77eda1ebcb2f /bin/bash //进入nginx容器root@77eda1ebcb2f:/# cat /etc/debian_version 8.6++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Redhat系统 Debian系统---------------------------------------------- 包管理命令 rpm dpkg 包安装命令 yum apt-get++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[root@f3a71d377ef0 /]# rpm -qa | grep httpd //查看httpd安装包root@77eda1ebcb2f:/# dpkg -l | grep nginx //查看nginx安装包[root@f3a71d377ef0 /]# rpm -ql httpd //查看httpd安装路径root@77eda1ebcb2f:/# dpkg -L nginx //查看nginx安装路径[root@f3a71d377ef0 /]# rpm -qf /bin/ls //查看ls命令安装包root@77eda1ebcb2f:/# dpkg -S /bin/ls //查看ls命令安装包
[root@docker01 ~]# docker rm $(docker stop $(docker ps -aq)) //删除所有容器[root@docker01 ~]# docker run -it centos //启动容器[root@1a762df67c60 /]# cd /etc/yum.repos.d/ [root@1a762df67c60 yum.repos.d]# rm -f *[root@1a762df67c60 yum.repos.d]# vi dvd.repo //配置yum[Centos]name=Centos7.4baseurl=ftp://192.168.8.254/rhel7/enabled=1gpgcheck=0[root@1a762df67c60 yum.repos.d]# yum -y install vim net-tools psmisc iproute //安装常用软件包[root@1a762df67c60 ~]# exit //退出centos容器[root@docker01 ~]# docker commit 1a762df67c60 mycentos:latest //将修改后的centos容器另存为新镜像mycentos[root@docker01 ~]# docker history mycentos:latest //查看镜像mycentos的制作过程[root@docker01 ~]# docker run -it mycentos //启动mycentos容器,测试yum、ifconfig、vim等命令
— FROM:基础镜像
— MAINTAINER:镜像创建者信息 — EXPOSE:开放的端口 — ENV: 设置变量 — ADD:复制文件到镜像 — RUN:制作镜像时执行的命令,可以有多个 — WORKDIR:定义容器默认工作目录 — CMD:容器启动时执行的命令,仅可以有一条CMD[root@docker01 ~]# mkdir aaa //创建任意目录[root@docker01 ~]# cd aaa/ [root@docker01 aaa]# vim yum.repo[Centos]name=Centos7.4baseurl=ftp://192.168.8.254/rhel7/enabled=1gpgcheck=0[root@docker01 aaa]# touch Dockerfile //固定格式[root@docker01 aaa]# vim DockerfileFROM centos:latest //基于centos镜像RUN rm -f /etc/yum.repos.d/*.repo ADD yum.repo /etc/yum.repos.d/yum.repoRUN yum -y install vim net-tools psmisc iproute[root@docker01 aaa]# lsDockerfile yum.repo[root@docker01 aaa]# docker build -t test:latest . //创建镜像(“.”表示上下文目录)[root@docker01 aaa]# docker images //查看创建的镜像REPOSITORY TAG IMAGE ID CREATED SIZEtest latest 6fb46839a1fc 24 minutes ago 302.8 MBmycentos latest 203271180188 About an hour ago 302.8 MBbusybox latest 64f5d945efcc 2 weeks ago 1.199 MBubuntu latest 452a96d81c30 13 months ago 79.62 MBcentos latest e934aafc2206 13 months ago 198.6 MBregistry latest d1fd7d86a825 16 months ago 33.26 MBnginx latest a5311a310510 2 years ago 181.4 MBredis latest 1aa84b1b434e 2 years ago 182.8 MB[root@docker01 aaa]# docker history test:latest //查看镜像test的制作过程IMAGE CREATED CREATED BY SIZE COMMENT6fb46839a1fc 25 minutes ago /bin/sh -c yum -y install vim net-tools psmis 104.1 MB 6c36ec3b9f4f 26 minutes ago /bin/sh -c #(nop) ADD file:4003eb1511235a4fde 80 B f81a50ced8ca 26 minutes ago /bin/sh -c rm -f /etc/yum.repos.d/*.repo 0 B e934aafc2206 13 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B13 months ago /bin/sh -c #(nop) LABEL org.label-schema.sch 0 B 13 months ago /bin/sh -c #(nop) ADD file:f755805244a649ecca 198.6 MB[root@docker01 aaa]# docker run -it test //启动一个test容器,测试yum、ifconfig、vim等命令#############################################################################制作默认启动python镜像[root@docker01 aaa]# rm -f yum.repo [root@docker01 aaa]# lsDockerfile[root@docker01 aaa]# vim DockerfileFROM mycentos:latest //基于mycentos镜像CMD ["/usr/bin/python"] //定义默认启动命令[root@docker01 aaa]# docker build -t mycentos:python . //创建镜像mycentos:python[root@docker01 aaa]# docker run -it mycentos:python //启动一个mycentos:python容器Python 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> //启动容器后默认进入python#############################################################################制作一个默认启动sshd服务镜像[root@docker01 aaa]# cd[root@docker01 ~]# mkdir bbb[root@docker01 ~]# cd bbb/[root@docker01 bbb]# touch Dockerfile[root@docker01 bbb]# vim DockerfileFROM mycentos:latestRUN yum -y install openssh-server initscriptsRUN sshd-keygenRUN echo "123456" | passwd --stdin rootENV EnvironmentFile=/etc/sysconfig/sshd //设置环境变量EXPOSE 22 //开放22端口CMD ["/usr/sbin/sshd", "-D"] //定义默认启动命令sshd[root@docker01 bbb]# docker build -t mycentos:sshd .[root@docker01 bbb]# docker run -itd mycentos:sshd //启动一个mycentos:sshd容器,直接进入ssh连接###############################################################################制作一个默认启动httpd服务,首页为hello world!!!的镜像[root@docker01 ~]# mkdir ccc[root@docker01 ccc]# touch Dockerfile[root@docker01 ccc]# vim DockerfileFROM mycentos:latestRUN yum -y install httpdWORKDIR /var/www/html/ADD index.html index.htmlENV EnvironmentFile=/etc/sysconfig/httpdEXPOSE 80EXPOSE 443CMD ["/usr/sbin/httpd", "-DFOREGROUND"][root@docker01 ccc]# docker build -t mycentos:httpd . //创建镜像[root@docker01 ccc]# docker run -itd mycentos:httpd //启动容器[root@docker01 ~]# curl 172.17.0.2 //宿主机访问首页hello world!!![root@docker01 ~]# docker inspect -f "{ {.NetworkSettings.IPAddress}}" 65d09cc43858 //查看启动容器ip172.17.0.2[root@docker01 ~]# docker inspect -f "{ {.State.Pid}}" 65d09cc43858 //查看启动容器的进程id23611
镜像、容器、镜像仓库的工作流程如下图所示。
#配置服务端[root@docker01 ~]# vim /etc/docker/daemon.json //创建配置文件{ "insecure-registries": ["192.168.8.11:5000"] //将宿主机作为私有镜像仓库服务器,默认端口5000}[root@docker01 ~]# systemctl restart docker //重启docker服务[root@docker01 ~]# docker run -itd -p 5000:5000 registry //启动私有仓库[root@docker01 ~]# curl http://192.168.8.11:5000/v2/ //验证私有仓库,初始为空{}[root@docker01 ~]# docker tag busybox:latest 192.168.8.11:5000/busybox:latest //上传镜像前打标签[root@docker01 ~]# docker push 192.168.8.11:5000/busybox:latest //上传镜像[root@docker01 ~]# for i in python sshd httpd;> do docker tag mycentos:${i} 192.168.8.11:5000/mycentos:${i}> docker push 192.168.8.11:5000/mdaycentos:${i}^C[root@docker01 ~]# for i in latest python sshd httpd;do //继续上传其他镜像> docker tag mycentos:${i} 192.168.8.11:5000/mycentos:${i}> docker push 192.168.8.11:5000/mycentos:${i}> docker rmi 192.168.8.11:5000/mycentos:${i}> done#配置客户端[root@docker02 ~]# vim /etc/docker/daemon.json //配置客户端docker02{ "insecure-registries": ["192.168.8.11:5000"]}[root@docker02 ~]# systemctl restart docker[root@docker02 ~]# docker run -it 192.168.8.11:5000/mycentos:latest //客户端通过远程镜像仓库启动容器[root@docker02 ~]# curl http://192.168.8.11:5000/v2/_catalog //查看仓库中的镜像{"repositories":["busybox","mycentos"]}[root@docker02 ~]# curl http://192.168.8.11:5000/v2/mycentos/tags/list //查看某一镜像的所有标签{"name":"mycentos","tags":["latest","python","sshd","httpd"]}
1、搭建一个NFS服务器,创建共享目录
2、docker01挂载nfs服务器共享目录,在doker01上启动nginx容器,将挂载的共享目录映射给容器 3、docker02挂载nfs服务器共享目录,在doker02上启动apache容器,将挂载的共享目录映射给容器#创建NFS服务器(nfs99:192.168.8.99)[root@nfs99 ~]# yum -y install nfs-utils[root@nfs99 ~]# vim /etc/exports/var/webpublic *(rw) //配置所有主机对nfs服务器共享目录/var/webpublic均有读写权限[root@nfs99 ~]# mkdir /var/webpublic[root@nfs99 ~]# chmod 777 /var/webpublic/[root@nfs99 ~]# systemctl start nfs[root@nfs99 ~]# systemctl enable nfs#docker主机挂载nfs共享目录(以docker01主机为例)[root@docker01 ~]# yum -y install nfs-utils[root@docker01 ~]# showmount -e 192.168.8.99 //查看nfs服务器共享目录Export list for 192.168.8.99:/var/webpublic *[root@docker01 ~]# mkdir /var/webroot[root@docker01 ~]# mount -t nfs 192.168.8.99:/var/webpublic /var/webroot //将本机/var/webroot挂载至nfs共享目录[root@docker01 webroot]# vim /etc/fstab/dev/vda1 / xfs defaults 0 0192.168.8.99:/var/webpublic /var/webroot nfs defaults,_netdev 0 0 //设置开机自动挂载[root@docker01 ~]# cd /var/webroot/[root@docker01 webroot]# vim index.htmlhello world!!!#映射nfs共享目录至docker容器[root@docker01 ~]# docker run -it nginx /bin/bashroot@485fa8e0f189:/# nginx -T //查看nginx配置文件...location / { root /usr/share/nginx/html; index index.html index.htm; }...root@485fa8e0f189:/# exit[root@docker01 ~]# docker run -itd -v /var/webroot/:/usr/share/nginx/html nginx //启动nginx容器,映射挂载的共享目录至nginx根目录[root@docker01 ~]# docker ps[root@docker01 ~]# docker inspect d697eb5d74fe //查看容器ip[root@docker01 ~]# curl 172.17.0.2 //访问nginx容器首页hello world!!![root@docker02 webroot]# docker run -itd -v /var/webroot/:/var/www/html 192.168.8.11:5000/mycentos:httpd //docker02主机通过远程镜像仓库启动apache容器,并映射挂载的共享目录至apache根目录[root@docker02 webroot]# curl 172.17.0.2 //访问apache首页hello world!!! //内容与docker01主机的nginx容器首页一致#############################################################################[root@docker01 webroot]# vim index.html //docker01主机修改首页hello world!!!Nice to meet you![root@docker01 webroot]# curl 172.17.0.2 //docker01主机再次访问nginx容器首页hello world!!!Nice to meet you![root@docker02 webroot]# curl 172.17.0.2 //docker02主机再次访问apache容器首页hello world!!!Nice to meet you!
[root@docker01 ~]# docker network list //查看docker创建的默认网络模型NETWORK ID NAME DRIVER SCOPEf42c63f0a299 bridge bridge local 0c34442f9fbc host host local 6a11eddd8c46 none null local[root@docker01 ~]# docker network create --subnet=10.10.10.0/24 docker1 //创建虚拟网桥docker1,指定子网为10.10.10.0/24[root@docker01 ~]# docker network listNETWORK ID NAME DRIVER SCOPEf42c63f0a299 bridge bridge local 75922336526a docker1 bridge local 0c34442f9fbc host host local 6a11eddd8c46 none null local [root@docker01 ~]# docker run -it busybox //启动busybox容器1,默认连接虚拟交换机docker0[root@docker01 ~]# docker run -it busybox //启动busybox容器2,默认连接虚拟交换机docker0[root@docker01 ~]# docker run -it --network=docker1 busybox //启动busybox容器3,指定连接虚拟交换机docker1[root@docker01 ~]# docker run -it --network=docker1 busybox //启动busybox容器4,指定连接虚拟交换机docker1#测试ping命令,容器1、2可相互ping通,容器3、4可以相互ping通,容器1、2与容器3、4无法ping通
[root@docker01 ~]# docker run -itd -p 80:80 mycentos:httpd //通过端口映射启动一个httpd容器[root@room9pc01 ~]# curl http://192.168.8.11/ //客户端访问容器httpd服务hello world!!!#############################################################################[root@docker01 ~]# docker stop 78e97a2f82b8 //关闭以上httpd容器[root@docker01 ~]# docker run -itd -p 80:80 nginx //通过端口映射启动一个nginx容器[root@room9pc01 ~]# curl http://192.168.8.11/ //客户端访问容器nginx服务Welcome to nginx! ...############################################################################[root@docker01 ~]# docker run -itd -p 3306:3306 mycentos:mysqld //通过端口映射启动一个mysqld容器[root@docker01 ~]# docker exec -it 89af33392156 /bin/bash //进入mysqld容器[root@89af33392156 /]# mysqlMariaDB [mysql]> use mysqlMariaDB [mysql]> update user set Host='%' where User='root'; //修改所有人(%)权限MariaDB [mysql]> flush privileges; //刷新权限[root@room9pc01 ~]# mysql -uroot -h192.168.8.11 //客户端访问mysqld容器数据库MariaDB [(none)]>
/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdXhlMTk5MA==,size_16,color_FFFFFF,t_70)
Docker对比传统虚拟机总结准备两台虚拟机(docker01:192.168.8.11,docker02:192.168.8.12),能访问外网
1、安装前准备[root@docker01 ~]# vim /etc/hosts //以docker01为例。下同#添加以下两行192.168.8.11 docker01192.168.8.12 docker02[root@docker01 ~]# vim /etc/yum.repos.d/dvd.repoCentos]name=Centos7.4baseurl=ftp://192.168.8.254/rhel7/enabled=1gpgcheck=0[Docker]name=Centos7.4baseurl=ftp://192.168.8.254/docker/enabled=1gpgcheck=0
2、安装并启动docker
[root@docker01 ~]# yum list |grep dockerdocker-engine.x86_64 1.12.1-1.el7.centos @Docker docker-engine-selinux.noarch 1.12.1-1.el7.centos @Docker[root@docker01 ~]# yum -y install docker-engine[root@docker01 ~]# systemctl start docker[root@docker01 ~]# systemctl enable docker[root@docker01 ~]# ifconfig docker0 //docker启动后会生成一个虚拟交换机docker0docker0: flags=4099mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
镜像常用命令
[root@docker01 ~]# docker images //查看镜像[root@docker01 ~]# docker history busybox //查看镜像制作历史(层次结构)[root@docker01 ~]# docker inspect centos:latest //查看镜像底层信息[root@docker01 ~]# docker pull centos //下载镜像[root@docker01 ~]# docker push centos //上传镜像[root@docker01 ~]# docker save busybox:latest > busybox.tar //镜像另存为tar包[root@docker02 ~]# docker load < busybox.tar //使用tar包导入镜像[root@docker01 ~]# docker search busybox //搜索镜像[root@docker01 ~]# docker tag centos:latest centos:lx //修改镜像名称和标签[root@docker01 ~]# docker rmi centos:lx //删除本地镜像
镜像命令实践
############################################################################[root@docker01 ~]# man docker search //查看docker相应命令帮助文件############################################################################[root@docker01 ~]# docker images //查看docker镜像,初始镜像为空REPOSITORY TAG IMAGE ID CREATED SIZE[root@docker01 ~]# docker search mysql //搜索mysql网络镜像NAME DESCRIPTION STARS OFFICIAL AUTOMATED //OFFICIAL值为ok时表示为官方镜像mysql MySQL is a widely used, open-source relati... 8196 [OK] mariadb MariaDB is a community-developed fork of M... 2791 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Crea... 610 [OK]percona Percona Server is a fork of the MySQL rela... 434 [OK] centurylink/mysql Image containing mysql. Optimized to be li... 60 [OK][root@docker01 ~]# docker search busybox //搜索busybox网络镜像NAME DESCRIPTION STARS OFFICIAL AUTOMATEDbusybox Busybox base image. 1589 [OK] progrium/busybox 69 [OK]radial/busyboxplus Full-chain, Internet enabled, busybox made... 24 [OK][root@docker01 ~]# docker pull busybox //下载busybox网络镜像Using default tag: latestlatest: Pulling from library/busybox53071b97a884: Pull complete Digest: sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3dStatus: Downloaded newer image for busybox:latest[root@docker01 ~]# docker images //查看下载镜像REPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 64f5d945efcc 2 weeks ago 1.199 MB[root@docker01 ~]# ls[root@docker01 ~]# docker save busybox:latest > busybox.tar //备份docker镜像[root@docker01 ~]# lsbusybox.tar[root@docker01 ~]# scp busybox.tar 192.168.8.12:/root[root@docker02 ~]# docker load < busybox.tar //恢复镜像d1156b98822d: Loading layer [==================================================>] 1.416 MB/1.416 MBLoaded image: busybox:latest[root@docker02 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 64f5d945efcc 2 weeks ago 1.199 MB[root@docker01 ~]# cd docker_images/[root@docker01 docker_images]# lscentos.tar nginx.tar redis.tar registry.tar ubuntu.tar[root@docker01 docker_images]# for i in *;do docker load -i ${i};done //导入已下载镜像,docker02主机同样操作[root@docker01 docker_images]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 64f5d945efcc 2 weeks ago 1.199 MBubuntu latest 452a96d81c30 13 months ago 79.62 MBcentos latest e934aafc2206 13 months ago 198.6 MBregistry latest d1fd7d86a825 16 months ago 33.26 MBnginx latest a5311a310510 2 years ago 181.4 MBredis latest 1aa84b1b434e 2 years ago 182.8 MB
[root@docker01 ~]# docker run -itd nginx:latest //运行容器,-itd(选项分别表示交互式、运行后开启终端、后台运行)[root@docker01 ~]# docker run -it centos //运行容器后进入容器[root@f26819924bcf /]# exit //退出容器,容器自动关闭(注:ctrl+p+q可以实现退出时不关闭容器)[root@docker01 ~]# docker attach 4fcdae128d1e //进入运行中的容器(前提是容器默认启动命令支持交互如/bin/bash,exit时关闭容器,常用容器排错)[root@docker01 ~]# docker exec -it 4888e01da6b1 /bin/bash //进入运行中的容器(exit不会关闭容器,常用于容器维护)[root@docker01 ~]# docker ps //查看启动容器[root@docker01 ~]# docker ps -a //查看启动过的容器[root@docker01 ~]# docker ps -aq //查看启动过的容器ID[root@docker01 ~]# docker stop 1cf8349b9de0 //关闭容器[root@docker01 ~]# docker start 1cf8349b9de0 //启动容器[root@docker01 ~]# docker restart 1cf8349b9de0 //重启容器[root@docker01 ~]# docker inspect 1cf8349b9de0 //查看容器底层信息[root@docker01 ~]# docker top 1cf8349b9de0 //查看容器进程列表[root@docker01 ~]# docker rm 1cf8349b9de0 //删除容器(需在关闭容器后执行,否则会报错)[root@docker01 ~]# docker rm $(docker stop eec00f87a111) //删除正在运行的容器[root@docker01 ~]# for i in `docker ps -aq`; do docker rm $i;done //批量删除启动过的容器[root@docker01 ~]# docker rm $(docker ps -aq) //批量删除启动过的容器
[root@docker01 ~]# docker run -it centos:latest /bin/bash //启动容器centos[root@eac031d4b130 /]# hostname //启动容器后主机名隔离eac031d4b130[root@eac031d4b130 yum.repos.d]# ifconfig //容器中无config命令,配置yum安装bash: ifconfig: command not found[root@eac031d4b130 /]# cd /etc/yum.repos.d/[root@eac031d4b130 yum.repos.d]# lsCentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repoCentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo[root@eac031d4b130 yum.repos.d]# rm -rf *[root@eac031d4b130 yum.repos.d]# vi /etc/yum.repos.d/dvd.repo[Centos]name=Centos7.4baseurl=ftp://192.168.8.254/rhel7/enabled=1gpgcheck=0[root@eac031d4b130 yum.repos.d]# yum provides ifconfig //查看ifconfig命令安装包Loaded plugins: fastestmirror, ovlCentos | 4.1 kB 00:00:00 (1/2): Centos/group_gz | 137 kB 00:00:00 (2/2): Centos/primary_db | 4.0 MB 00:00:00 Determining fastest mirrorsCentos/filelists_db | 3.4 MB 00:00:00 net-tools-2.0-0.22.20131004git.el7.x86_64 : Basic networking toolsRepo : CentosMatched from:Filename : /sbin/ifconfig[root@eac031d4b130 yum.repos.d]# yum -y install net-tools //安装ifconfig命令安装包[root@eac031d4b130 yum.repos.d]# ifconfig eth0: flags=4163mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0 //启动容器后网络隔离[root@docker01 ~]# ifconfig //对比容器网络docker0: flags=4163 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0[root@eac031d4b130 /]# ls /anaconda-post.log bin dev etc home lib lib64 //启动容器后文件系统隔离media mnt opt proc root run sbin srv sys tmp usr var[root@docker01 ~]# ls / //对比容器根目录bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var[root@eac031d4b130 /]# pstree //启动容器后进程信息向量隔离bash---pstree[root@docker01 ~]# pstree //对比容器进程信息向量[root@eac031d4b130 /]# cat /etc/passwd //启动容器后用户隔离[root@docker01 ~]# cat /etc/passwd //对比容器用户##############################################################################[root@docker01 ~]# docker run -it busybox:latest /bin/bash //busybox容器中无/bin/bash命令,启动容器失败[root@docker01 ~]# docker run -it busybox:latest /bin/sh //busybox容器中默认启动命令为/bin/sh[root@docker01 ~]# docker run -it centos:latest //按默认启动命令启动centos容器[root@40f027323b25 /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 13:14 ? 00:00:00 /bin/bash //centos容器中默认启动命令为/bin/bashroot 13 1 0 13:14 ? 00:00:00 ps -ef[root@docker01 ~]# docker ps //开启另一个终端,查看启动的容器
启动一个centos容器,安装apache,设置默认首页为hello world!
[root@docker01 ~]# docker run -it centos[root@f3a71d377ef0 ~]# vi /etc/yum.repos.d/dvd.repo[rhel7]name=rhel7baseurl=ftp://192.168.8.254/rhel7enabled=1gpgcheck=0[root@f3a71d377ef0 ~]# yum -y install httpd vim[root@f3a71d377ef0 ~]# cd /var/www/html/[root@f3a71d377ef0 html]# vim index.htmlhello world![root@f3a71d377ef0 html]# systemctl start httpd //容器中无systemd命令,启动httpd报错[root@f3a71d377ef0 html]# cat /usr/lib/systemd/system/httpd.service //查看手动启动httpd命令...[Service]Type=notifyEnvironmentFile=/etc/sysconfig/httpdExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND...[root@f3a71d377ef0 html]# /usr/sbin/httpd $OPTIONS -DFOREGROUND //手动启动centos容器中的httpd服务[root@docker01 ~]# curl 172.17.0.2 //宿主机访问centos容器httpd服务hello world!
启动一个nginx容器
[root@docker01 ~]# docker run -itd nginx[root@docker01 ~]# docker ps //查看nginx容器id[root@docker01 ~]# docker exec -it 77eda1ebcb2f /bin/bash //进入nginx容器root@77eda1ebcb2f:/# cat /etc/debian_version 8.6++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Redhat系统 Debian系统---------------------------------------------- 包管理命令 rpm dpkg 包安装命令 yum apt-get++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[root@f3a71d377ef0 /]# rpm -qa | grep httpd //查看httpd安装包root@77eda1ebcb2f:/# dpkg -l | grep nginx //查看nginx安装包[root@f3a71d377ef0 /]# rpm -ql httpd //查看httpd安装路径root@77eda1ebcb2f:/# dpkg -L nginx //查看nginx安装路径[root@f3a71d377ef0 /]# rpm -qf /bin/ls //查看ls命令安装包root@77eda1ebcb2f:/# dpkg -S /bin/ls //查看ls命令安装包
[root@docker01 ~]# docker rm $(docker stop $(docker ps -aq)) //删除所有容器[root@docker01 ~]# docker run -it centos //启动容器[root@1a762df67c60 /]# cd /etc/yum.repos.d/ [root@1a762df67c60 yum.repos.d]# rm -f *[root@1a762df67c60 yum.repos.d]# vi dvd.repo //配置yum[Centos]name=Centos7.4baseurl=ftp://192.168.8.254/rhel7/enabled=1gpgcheck=0[root@1a762df67c60 yum.repos.d]# yum -y install vim net-tools psmisc iproute //安装常用软件包[root@1a762df67c60 ~]# exit //退出centos容器[root@docker01 ~]# docker commit 1a762df67c60 mycentos:latest //将修改后的centos容器另存为新镜像mycentos[root@docker01 ~]# docker history mycentos:latest //查看镜像mycentos的制作过程[root@docker01 ~]# docker run -it mycentos //启动mycentos容器,测试yum、ifconfig、vim等命令
— FROM:基础镜像
— MAINTAINER:镜像创建者信息 — EXPOSE:开放的端口 — ENV: 设置变量 — ADD:复制文件到镜像 — RUN:制作镜像时执行的命令,可以有多个 — WORKDIR:定义容器默认工作目录 — CMD:容器启动时执行的命令,仅可以有一条CMD[root@docker01 ~]# mkdir aaa //创建任意目录[root@docker01 ~]# cd aaa/ [root@docker01 aaa]# vim yum.repo[Centos]name=Centos7.4baseurl=ftp://192.168.8.254/rhel7/enabled=1gpgcheck=0[root@docker01 aaa]# touch Dockerfile //固定格式[root@docker01 aaa]# vim DockerfileFROM centos:latest //基于centos镜像RUN rm -f /etc/yum.repos.d/*.repo ADD yum.repo /etc/yum.repos.d/yum.repoRUN yum -y install vim net-tools psmisc iproute[root@docker01 aaa]# lsDockerfile yum.repo[root@docker01 aaa]# docker build -t test:latest . //创建镜像(“.”表示上下文目录)[root@docker01 aaa]# docker images //查看创建的镜像REPOSITORY TAG IMAGE ID CREATED SIZEtest latest 6fb46839a1fc 24 minutes ago 302.8 MBmycentos latest 203271180188 About an hour ago 302.8 MBbusybox latest 64f5d945efcc 2 weeks ago 1.199 MBubuntu latest 452a96d81c30 13 months ago 79.62 MBcentos latest e934aafc2206 13 months ago 198.6 MBregistry latest d1fd7d86a825 16 months ago 33.26 MBnginx latest a5311a310510 2 years ago 181.4 MBredis latest 1aa84b1b434e 2 years ago 182.8 MB[root@docker01 aaa]# docker history test:latest //查看镜像test的制作过程IMAGE CREATED CREATED BY SIZE COMMENT6fb46839a1fc 25 minutes ago /bin/sh -c yum -y install vim net-tools psmis 104.1 MB 6c36ec3b9f4f 26 minutes ago /bin/sh -c #(nop) ADD file:4003eb1511235a4fde 80 B f81a50ced8ca 26 minutes ago /bin/sh -c rm -f /etc/yum.repos.d/*.repo 0 B e934aafc2206 13 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B13 months ago /bin/sh -c #(nop) LABEL org.label-schema.sch 0 B 13 months ago /bin/sh -c #(nop) ADD file:f755805244a649ecca 198.6 MB[root@docker01 aaa]# docker run -it test //启动一个test容器,测试yum、ifconfig、vim等命令#############################################################################制作默认启动python镜像[root@docker01 aaa]# rm -f yum.repo [root@docker01 aaa]# lsDockerfile[root@docker01 aaa]# vim DockerfileFROM mycentos:latest //基于mycentos镜像CMD ["/usr/bin/python"] //定义默认启动命令[root@docker01 aaa]# docker build -t mycentos:python . //创建镜像mycentos:python[root@docker01 aaa]# docker run -it mycentos:python //启动一个mycentos:python容器Python 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> //启动容器后默认进入python#############################################################################制作一个默认启动sshd服务镜像[root@docker01 aaa]# cd[root@docker01 ~]# mkdir bbb[root@docker01 ~]# cd bbb/[root@docker01 bbb]# touch Dockerfile[root@docker01 bbb]# vim DockerfileFROM mycentos:latestRUN yum -y install openssh-server initscriptsRUN sshd-keygenRUN echo "123456" | passwd --stdin rootENV EnvironmentFile=/etc/sysconfig/sshd //设置环境变量EXPOSE 22 //开放22端口CMD ["/usr/sbin/sshd", "-D"] //定义默认启动命令sshd[root@docker01 bbb]# docker build -t mycentos:sshd .[root@docker01 bbb]# docker run -itd mycentos:sshd //启动一个mycentos:sshd容器,直接进入ssh连接###############################################################################制作一个默认启动httpd服务,首页为hello world!!!的镜像[root@docker01 ~]# mkdir ccc[root@docker01 ccc]# touch Dockerfile[root@docker01 ccc]# vim DockerfileFROM mycentos:latestRUN yum -y install httpdWORKDIR /var/www/html/ADD index.html index.htmlENV EnvironmentFile=/etc/sysconfig/httpdEXPOSE 80EXPOSE 443CMD ["/usr/sbin/httpd", "-DFOREGROUND"][root@docker01 ccc]# docker build -t mycentos:httpd . //创建镜像[root@docker01 ccc]# docker run -itd mycentos:httpd //启动容器[root@docker01 ~]# curl 172.17.0.2 //宿主机访问首页hello world!!![root@docker01 ~]# docker inspect -f "{ {.NetworkSettings.IPAddress}}" 65d09cc43858 //查看启动容器ip172.17.0.2[root@docker01 ~]# docker inspect -f "{ {.State.Pid}}" 65d09cc43858 //查看启动容器的进程id23611
镜像、容器、镜像仓库的工作流程如下图所示。
#配置服务端[root@docker01 ~]# vim /etc/docker/daemon.json //创建配置文件{ "insecure-registries": ["192.168.8.11:5000"] //将宿主机作为私有镜像仓库服务器,默认端口5000}[root@docker01 ~]# systemctl restart docker //重启docker服务[root@docker01 ~]# docker run -itd -p 5000:5000 registry //启动私有仓库[root@docker01 ~]# curl http://192.168.8.11:5000/v2/ //验证私有仓库,初始为空{}[root@docker01 ~]# docker tag busybox:latest 192.168.8.11:5000/busybox:latest //上传镜像前打标签[root@docker01 ~]# docker push 192.168.8.11:5000/busybox:latest //上传镜像[root@docker01 ~]# for i in python sshd httpd;> do docker tag mycentos:${i} 192.168.8.11:5000/mycentos:${i}> docker push 192.168.8.11:5000/mdaycentos:${i}^C[root@docker01 ~]# for i in latest python sshd httpd;do //继续上传其他镜像> docker tag mycentos:${i} 192.168.8.11:5000/mycentos:${i}> docker push 192.168.8.11:5000/mycentos:${i}> docker rmi 192.168.8.11:5000/mycentos:${i}> done#配置客户端[root@docker02 ~]# vim /etc/docker/daemon.json //配置客户端docker02{ "insecure-registries": ["192.168.8.11:5000"]}[root@docker02 ~]# systemctl restart docker[root@docker02 ~]# docker run -it 192.168.8.11:5000/mycentos:latest //客户端通过远程镜像仓库启动容器[root@docker02 ~]# curl http://192.168.8.11:5000/v2/_catalog //查看仓库中的镜像{"repositories":["busybox","mycentos"]}[root@docker02 ~]# curl http://192.168.8.11:5000/v2/mycentos/tags/list //查看某一镜像的所有标签{"name":"mycentos","tags":["latest","python","sshd","httpd"]}
1、搭建一个NFS服务器,创建共享目录
2、docker01挂载nfs服务器共享目录,在doker01上启动nginx容器,将挂载的共享目录映射给容器 3、docker02挂载nfs服务器共享目录,在doker02上启动apache容器,将挂载的共享目录映射给容器#创建NFS服务器(nfs99:192.168.8.99)[root@nfs99 ~]# yum -y install nfs-utils[root@nfs99 ~]# vim /etc/exports/var/webpublic *(rw) //配置所有主机对nfs服务器共享目录/var/webpublic均有读写权限[root@nfs99 ~]# mkdir /var/webpublic[root@nfs99 ~]# chmod 777 /var/webpublic/[root@nfs99 ~]# systemctl start nfs[root@nfs99 ~]# systemctl enable nfs#docker主机挂载nfs共享目录(以docker01主机为例)[root@docker01 ~]# yum -y install nfs-utils[root@docker01 ~]# showmount -e 192.168.8.99 //查看nfs服务器共享目录Export list for 192.168.8.99:/var/webpublic *[root@docker01 ~]# mkdir /var/webroot[root@docker01 ~]# mount -t nfs 192.168.8.99:/var/webpublic /var/webroot //将本机/var/webroot挂载至nfs共享目录[root@docker01 webroot]# vim /etc/fstab/dev/vda1 / xfs defaults 0 0192.168.8.99:/var/webpublic /var/webroot nfs defaults,_netdev 0 0 //设置开机自动挂载[root@docker01 ~]# cd /var/webroot/[root@docker01 webroot]# vim index.htmlhello world!!!#映射nfs共享目录至docker容器[root@docker01 ~]# docker run -it nginx /bin/bashroot@485fa8e0f189:/# nginx -T //查看nginx配置文件...location / { root /usr/share/nginx/html; index index.html index.htm; }...root@485fa8e0f189:/# exit[root@docker01 ~]# docker run -itd -v /var/webroot/:/usr/share/nginx/html nginx //启动nginx容器,映射挂载的共享目录至nginx根目录[root@docker01 ~]# docker ps[root@docker01 ~]# docker inspect d697eb5d74fe //查看容器ip[root@docker01 ~]# curl 172.17.0.2 //访问nginx容器首页hello world!!![root@docker02 webroot]# docker run -itd -v /var/webroot/:/var/www/html 192.168.8.11:5000/mycentos:httpd //docker02主机通过远程镜像仓库启动apache容器,并映射挂载的共享目录至apache根目录[root@docker02 webroot]# curl 172.17.0.2 //访问apache首页hello world!!! //内容与docker01主机的nginx容器首页一致#############################################################################[root@docker01 webroot]# vim index.html //docker01主机修改首页hello world!!!Nice to meet you![root@docker01 webroot]# curl 172.17.0.2 //docker01主机再次访问nginx容器首页hello world!!!Nice to meet you![root@docker02 webroot]# curl 172.17.0.2 //docker02主机再次访问apache容器首页hello world!!!Nice to meet you!
[root@docker01 ~]# docker network list //查看docker创建的默认网络模型NETWORK ID NAME DRIVER SCOPEf42c63f0a299 bridge bridge local 0c34442f9fbc host host local 6a11eddd8c46 none null local[root@docker01 ~]# docker network create --subnet=10.10.10.0/24 docker1 //创建虚拟网桥docker1,指定子网为10.10.10.0/24[root@docker01 ~]# docker network listNETWORK ID NAME DRIVER SCOPEf42c63f0a299 bridge bridge local 75922336526a docker1 bridge local 0c34442f9fbc host host local 6a11eddd8c46 none null local [root@docker01 ~]# docker run -it busybox //启动busybox容器1,默认连接虚拟交换机docker0[root@docker01 ~]# docker run -it busybox //启动busybox容器2,默认连接虚拟交换机docker0[root@docker01 ~]# docker run -it --network=docker1 busybox //启动busybox容器3,指定连接虚拟交换机docker1[root@docker01 ~]# docker run -it --network=docker1 busybox //启动busybox容器4,指定连接虚拟交换机docker1#测试ping命令,容器1、2可相互ping通,容器3、4可以相互ping通,容器1、2与容器3、4无法ping通
[root@docker01 ~]# docker run -itd -p 80:80 mycentos:httpd //通过端口映射启动一个httpd容器[root@room9pc01 ~]# curl http://192.168.8.11/ //客户端访问容器httpd服务hello world!!!#############################################################################[root@docker01 ~]# docker stop 78e97a2f82b8 //关闭以上httpd容器[root@docker01 ~]# docker run -itd -p 80:80 nginx //通过端口映射启动一个nginx容器[root@room9pc01 ~]# curl http://192.168.8.11/ //客户端访问容器nginx服务Welcome to nginx! ...############################################################################[root@docker01 ~]# docker run -itd -p 3306:3306 mycentos:mysqld //通过端口映射启动一个mysqld容器[root@docker01 ~]# docker exec -it 89af33392156 /bin/bash //进入mysqld容器[root@89af33392156 /]# mysqlMariaDB [mysql]> use mysqlMariaDB [mysql]> update user set Host='%' where User='root'; //修改所有人(%)权限MariaDB [mysql]> flush privileges; //刷新权限[root@room9pc01 ~]# mysql -uroot -h192.168.8.11 //客户端访问mysqld容器数据库MariaDB [(none)]>
转载地址:http://yenwi.baihongyu.com/