Docker安装部署以及镜像、数据卷、网络管理

Docker

这里写图片描述

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker
可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低

Docker的应用场景

Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。

在服务型环境中部署和调整数据库或其他的后台应用。 从头编译或者扩展现有的OpenShift或Cloud
Foundry平台来搭建自己的PaaS环境

Docker 的优点

1、简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是
Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

2、避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如
Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

3、节省开支:
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式

实验环境:

物理机:172.25.41.250

安装包:

docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm

下载安装包

[root@foundation41 Desktop]# yum install -y docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm  docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
[root@foundation41 Desktop]# systemctl start docker
[root@foundation41 Desktop]# docker info    #查看信息
[root@foundation41 Desktop]# docker version  

一·game2048 镜像的使用

[root@foundation41 Desktop]# mkdir /var/www/html/images
[root@foundation41 Desktop]# mv game2048.tar /var/www/html/images
[root@foundation41 Desktop]# cd /var/www/html/images
[root@foundation41 images]# ls
game2048.tar
[root@foundation41 images]# docker load -i game2048.tar   #加载镜像
[root@foundation41 Desktop]# docker run -d --name vm1 game2048   
#-d打入后台
# --name表示为这个容器起的名字是vm1
[root@foundation41 images]# docker inspect vm1     #查看容器vm1
[root@foundation41 images]# ip addr

这里写图片描述
这里写图片描述

网页访问:172.17.0.2
这里写图片描述

二·容器管理

docker run -it --name vm1 ubuntu bash   # 创建容器
docker ps -a    #查看容器状态
docker attach vm1   #连接容器
docker top vm1   #查看容器进程
docker logs vm1   #查看容器指令输出 -f 参数可以实时查看
docker inspect vm1    #查看容器详情
docker stats vm1     #查看容器资源使用率
docker diff vm1    #查看容器修改
docker run -d --name vm1 ubuntu bash -c "while true; do echo westos; sleep 1; done"   #后台运行
docker stop vm1    #停止容器
docker start vm1    #启动容器
docker kill vm1    # 强制干掉容器
docker restart vm1     #重启容器
docker pause/unpause vm1   #暂停/恢复容器
docker rm vm1    #删除容器
docker export vm1 > vm1.tar    #导出容器
docker import vm1.tar image    #导入容器为镜像 image

三·镜像管理

镜像用来创建容器,是容器的只读模板,默认可以从 docker hub 上下载。docker 的镜像是增量修改,每次创建新的镜像都会在父镜像上构建一个增量的层,基于 AUFS 技术。

[root@foundation41 docker]# docker ps -a
[root@foundation41 docker]# docker stop vm3
[root@foundation41 docker]# docker rm vm3
[root@foundation41 docker]# docker rmi nginx 
[root@foundation41 docker]# docker images nginx 
[root@foundation41 docker]# docker images |grep nginx
[root@foundation41 docker]# docker search nginx   #查询镜像

这里写图片描述

[root@foundation41 docker]# docker search nginx
[root@foundation41 docker]# docker ps -a

这里写图片描述

[root@foundation41 docker]# mv /var/www/html/images/nginx.tar .
[root@foundation41 docker]# docker ps -a
[root@foundation41 docker]# docker load -i nginx.tar     
[root@foundation41 docker]# docker run -d --name vm2 nginx      #命名为vm2
[root@foundation41 docker]# docker inspect vm2    #查看网页访问IP

这里写图片描述
网页访问:172.17.0.3
这里写图片描述

添加内容

[root@foundation41 docker]# cd
[root@foundation41 ~]# vim index.html
[root@foundation41 ~]# cat index.html 
www.westos.org
[root@foundation41 ~]# docker cp index.html vm2:/usr/share/nginx/html/

网页再次访问:
这里写图片描述

改变字体大小

[root@foundation41 ~]# vim index.html
[root@foundation41 ~]# cat index.html 
<h1>www.westos.org</h1>
[root@foundation41 ~]# docker cp index.html vm2:/usr/share/nginx/html/

再次访问:
这里写图片描述

远程挂载

[root@foundation41 ~]# cd /tmp/
[root@foundation41 tmp]# mkdir docker
[root@foundation41 tmp]# cd docker/
[root@foundation41 docker]# mkdir web/
[root@foundation41 docker]# cd
[root@foundation41 ~]# mv index.html /tmp/docker/web/
[root@foundation41 ~]# docker stop vm2
[root@foundation41 ~]# docker rm vm2
[root@foundation41 ~]# docker run -d --name vm2 -v /tmp/docker/web/:/usr/share/nginx/html nginx    #挂载时,必须要停止镜像,删除镜像,否则会报错
[root@foundation41 ~]# docker inspect vm2
[root@foundation41 ~]# cd /tmp/docker/web/
[root@foundation41 web]# vim index.html 
[root@foundation41 web]# cat index.html 
<h1>hello a</h1>
[root@foundation41 web]# docker save nginx > nginx.tar

网页再次访问:就可以看到文件中编辑的内容
这样就实现了远程挂载现象
这里写图片描述

四·数据卷管理

docker run 在创建容器时使用 -v 参数可以挂载一个或多个数据卷到当前运行的容器中,
-v的作用是将宿主机上的目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共
享一个目录。

[root@foundation41 web]# docker ps -a
[root@foundation41 web]# docker stop vm1
[root@foundation41 web]# docker stop vm2
[root@foundation41 web]# docker rm vm2
[root@foundation41 web]# docker rm vm1
[root@foundation41 web]# docker ps -a
[root@foundation41 Desktop]# docker load -i rhel7.tar
[root@foundation41 ~]# docker run -it --name vm1 -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro rhel7 bash    #挂载宿主机
bash-4.2# cd /
bash-4.2# ls
bin   data1  dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  data2  etc  lib   media  opt  root  sbin  sys  usr
bash-4.2# cd /etc/yum.repos.d/
bash-4.2# ls
rhel-dvd.repo  rhel7.repo
bash-4.2# cat rhel-dvd.repo 
[rhel-dvd]
name="Remote classroom copy of dvd"
baseurl=file:///var/www/html/source7.3
gpgcheck=0
bash-4.2# cd /data2/
bash-4.2# ls
bash-4.2# touch file1
touch: cannot touch 'file1': Read-only file system
bash-4.2# cd /data1/
bash-4.2# touch file1

这里写图片描述
这里写图片描述

独立卷

1.添加独立卷

root@foundation41 ~]# docker run -d --name vm2 -v /usr/share/nginx/html nginx
[root@foundation41 ~]# docker inspect vm2 |grep vol
                "Type": "volume",
                "Source": "/var/lib/docker/volumes/25032c212664fb0aed24a48088e09839a06f734a4d12d157994ea3eaaff4345b/_data",    #来源
[root@foundation41 ~]# cd /var/lib/docker/volumes/25032c212664fb0aed24a48088e09839a06f734a4d12d157994ea3eaaff4345b/_data
[root@foundation41 _data]# ls
50x.html  index.html

这里写图片描述

2.删除独立卷
vm2

[root@foundation41 ~]# docker ps -a
[root@foundation41 ~]# docker stop vm2
[root@foundation41 ~]# docker rm vm2
[root@foundation41 ~]# docker volume rm 25032c212664fb0aed24a48088e09839a06f734a4d12d157994ea3eaaff4345b      #删除vm2独立卷
[root@foundation41 ~]# cd -

这里写图片描述

vm1

[root@foundation41 ~]# docker stop vm1   
[root@foundation41 ~]# docker rm vm1
[root@foundation41 ~]# docker volume rm 17dd941ce05d840b5b0b94c973835a538cf72a674c10b25660f8e742052aa77a    #删除vm1独立卷

这里写图片描述

[root@foundation41 ~]# docker volume ls    #查看独立卷
[root@foundation41 ~]# docker volume rm  `docker volume ls -q`    #删除独立卷
[root@foundation41 ~]# docker volume ls

这里写图片描述

五·网络管理

[root@foundation41 Desktop]# docker load -i ubuntu.tar
[root@foundation41 web]# docker start vm1
[root@foundation41 web]# docker ps
[root@foundation41 web]# docker inspect vm1 |grep Pid
[root@foundation41 tmp]# cd /proc/
[root@foundation41 proc]# cd 19235/
[root@foundation41 19235]# ls
[root@foundation41 19235]# cd
[root@foundation41 ~]# docker stop vm1
[root@foundation41 ~]# brctl show
[root@foundation41 docker]# docker rm -f `docker ps -aq`
[root@foundation41 docker]# docker ps -a
[root@foundation41 docker]# docker run -d --name vm1 nginx -p 8080:80 nginx
[root@foundation41 docker]# docker ps -a
[root@foundation41 docker]# docker rm vm1
[root@foundation41 docker]# docker run -d --name vm1 -p 8080:80 nginx
[root@foundation41 docker]# iptables -t nat -nL
[root@foundation41 docker]# docker run -it --name vm2 --link vm1:nginx ubuntu
root@b7d2810c24b0:/# cat /etc/hosts
root@15d2503c8492:/# ping nginx

这里写图片描述
这里写图片描述
网页访问:172.17.0.2
这里写图片描述

六·Dockerfile文件的编写

1·封装阿帕奇

[root@foundation41 ~]# docker stop vm3
[root@foundation41 ~]# docker rm vm3
[root@foundation41 ~]# docker run -it --name vm3 rhel7 bash
bash-4.2# cd /etc/yum.repos.d/
bash-4.2# vi dvd.repo
bash-4.2# cat dvd.repo 
[dvd]
name=rhel7.3
baseurl=http://172.25.41.250/source7.3
gpgcheck=0
bash-4.2# yum repolist
bash-4.2# yum install -y httpd

这里写图片描述

[root@foundation41 Desktop]# cd /tmp/docker/
[root@foundation41 docker]# vim Dockerfile
FROM rhel7   # 源镜像是rhel7,最好将名为rhel7的镜像放在本地
ENV HOSTNAME server1   #定义hostname为server1
MAINTAINER westos@westos.org    #定义邮箱
EXPOSE 80     #定义端口为80
COPY dvd.repo /etc/yum.repos.d/dvd.repo    #配置yum源 
RUN rpmdb --rebuilddb && yum install -y httpd && yum clean all
# 执行命令安装httpd并清除yum缓存
# rpmdb 命令用于初始化和重建rpm数据库
# --rebuilddb:从已安装的包头文件,反向重建RPM数据库
VOLUME ["/var/www/html"]     # 数据卷所在的位置
CMD ["/usr/sbin/httd", "-D", "FOREGROUND"]   
 ## 打开apach服务
# -D 是全局文件/etc/sysconfig/httpd中的打开参数

[root@foundation41 docker]# vim dvd.repo
[dvd]
name=rhel7
baseurl=http://172.25.41.250/source7.3
gpgcheck=0

[root@foundation41 docker]# docker build -t rhel7:v1 .   # rhel:v1是自己封装的镜像的名称和版本号

这里写图片描述

2·封装一个带有ssh服务

[root@foundation41 docker]# mkdir ssh/
[root@foundation41 docker]# cd ssh
[root@foundation41 ssh]# vim Dockerfile
vim Dockerfile
FROM rhel7
ENV HOSTNAME server2
MAINTAINER westos@westos.com
EXPOSE 22            # 对外端口是22
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y openssh-server && yum install -y openssh-clients yum clean all && ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" && ssh-keygen -q -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" && echo root:redhat | chpasswd
CMD ["/usr/sbin/sshd","-D"]

[root@foundation41 ssh]# vim dvd.repo
[dvd]
name=rhel7
baseurl=http://172.25.41.250/source7.3
gpgcheck=0

[root@foundation41 docker]# docker build -t rhel7:v2 .

这里写图片描述

3·利用supervisord一次封装多个服务

[root@foundation41 docker]# pwd
/tmp/docker
[root@foundation41 docker]# cat Dockerfile 
FROM rhel7
EXPOSE 80 22
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y httpd openssh-server openssh-clients supervisor && yum clean all && ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" && ssh-keygen -q -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" && echo root:westos | chpasswd
COPY supervisord.conf /etc/supervisord.conf
CMD ["/usr/bin/supervisord"] 

[root@foundation41 docker]# cat supervisord.conf 
[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd  -D     #打开sshd服务

[program:httpd]
command=/usr/sbin/httpd        #打开httpd服务

[root@foundation41 docker]# docker build -t rhel7:v3 .
[root@foundation41 docker]# docker run -d --name vm1 -v /tmp/docker/web:/var/www/html rhel7:v3
[root@foundation41 docker]# docker ps 
[root@foundation41 docker]# curl 172.17.0.2
[root@foundation41 docker]# ssh -l root 172.17.0.2

这里写图片描述

七·Dockerfile文件中CMD和EMTRYPOINT的区别

ENTRYPOINT 容器启动后执行的命令,让容器执行表现的像一个可执行程序一样,与CMD 的 区 别 是 不 可 以 被 docker run 覆 盖 , 会 把 docker run 后 面 的 参 数 当 作 传 递 给ENTRYPOINT 指令的参数。Dockerfile 中只能指定一个 ENTRYPOINT,如果指定了很多,只 有 最 后 一 个 有 效 。 docker run 命 令 的 -entrypoint 参 数 可 以 把 指 定 的 参 数 继 续 传 递 给ENTRYPOINT。

(1)

[root@foundation41 docker]# cd /tmp/docker/
[root@foundation41 docker]# mkdir test
[root@foundation41 docker]# cd test/
[root@foundation41 test]# vim Dockerfile
[root@foundation41 test]# cat Dockerfile 
FROM rhel7
CMD echo "hello world!"
[root@foundation41 test]# docker build -t rhel7:v4 .
[root@foundation41 test]# docker run --rm rhel7:v4
hello world!
[root@foundation41 test]# docker run --rm rhel7:v4 echo westos
westos

这里写图片描述

(2)

[root@foundation41 test]# docker rmi rhel7:v4
[root@foundation41 test]# vim Dockerfile
[root@foundation41 test]# cat Dockerfile 
FROM rhel7
ENTRYPOINT ["/bin/echo","hello"] 
CMD ["world"]
[root@foundation41 test]# docker build -t rhel7:v4 .
[root@foundation41 test]# docker run --rm rhel7:v4
hello world
[root@foundation41 test]# docker run --rm rhel7:v4 westos
hello westos

这里写图片描述

(3)

[root@foundation41 test]# docker rmi rhel7:v4
[root@foundation41 test]# vim Dockerfile 
[root@foundation41 test]# cat Dockerfile 
FROM rhel7
ENV name westos
ENTRYPOINT echo "hello $name"
[root@foundation41 test]# docker build -t rhel7:v4 .
[root@foundation41 test]# docker run --rm rhel7:v4
hello westos
[root@foundation41 test]# docker run --rm rhel7:v4  westos
hello westos

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值