1. 程式人生 > >docker 02

docker 02

docker

一、基於centos:latest創建新的鏡像,新鏡像已經配置好了yum並且安裝了net-tools
1、基於centos起動容器
[root@vh01 docker_images]# docker run -it centos bash
2、在容器中配置yum,並安裝net-tools
[root@798d29ec0d54 /]# rm -f /etc/yum.repos.d/*
[root@798d29ec0d54 /]# vi /etc/yum.repos.d/server.repo
[server]
name=server
baseurl=ftp://192.168.4.254/rhel7.2
enabled=1
gpgcheck=0
[root@798d29ec0d54 /]# yum install -y net-tools
3、將容器commit成為鏡像
[root@vh01 docker_images]# docker commit 798d29ec0d54 mycentos
[root@vh01 docker_images]# docker images
4、使用新鏡像起動容器,測試yum和net-tools是否可用
[root@vh01 docker_images]# docker run -it mycentos bash
[root@c492adb5fe6b /]# yum repolist
[root@c492adb5fe6b /]# ifconfig
二、通過dockerfile生成鏡像
1、創建工作目錄
[root@vh01 docker_images]# mkdir -p ~/mydocker/build1
[root@vh01 docker_images]# cd ~/mydocker/build1
2、編寫Dockerfile
[root@vh01 build1]# vim Dockerfile
FROM centos:latest
CMD ["/bin/echo", "Hello tedu"]
3、生成鏡像
[root@vh01 build1]# docker build -t mytest:latest .
4、測試
[root@vh01 build1]# docker run -it mytest
[root@vh01 build1]# docker ps
註意:容器輸入hello tedu後就退出了,因為它的使命已經結束

三、生成鏡像
1、創建工作目錄
[root@vh01 build1]# mkdir ~/mydocker/build2
[root@vh01 build1]# cd ~/mydocker/build2
2、編寫Dockerfile
[root@vh01 build2]# vim Dockerfile
FROM mycentos:latest
MAINTAINER zzg [email protected]
WORKDIR /var/www/html
ADD mytest.sh /root/mytest.sh
RUN yum install -y httpd
RUN yum install -y php
RUN yum install -y php-mysql
EXPOSE 80
CMD ["httpd", "-DFOREGROUND"]
3、生成鏡像
[root@vh01 build2]# echo ‘pwd‘ > mytest.sh
[root@vh01 build2]# docker build -t centos:http .
4、驗證
[root@vh01 build2]# docker run -P -itd centos:http

四、生成鏡像的建議
1、每個容器只運行一個進程
2、不要假定你的容器可以一直處於運行狀態,它們只是臨時的,很有可能被停止
3、使用.dockerignore文件排除不想加入到鏡像中的文件
4、使用官方提供的鏡像,而不是自己頭0制作
5、盡量減少鏡像的層次

基於鏡像起動多個容器
[root@vh01 build3]# for i in {1..5}; do docker run -P -h web$i --name web$i -itd centos:apache; done

練習:
基於centos,生成mysql鏡像
[root@vh01 mydocker]# cp -r build3 build4
[root@vh01 mydocker]# cd build4
[root@vh01 build4]# vim Dockerfile
FROM mycentos:latest
MAINTAINER zzg [email protected]
RUN yum install -y mariadb-server; mysql_install_db; chown -R mysql:mysql /var/lib/mysql
EXPOSE 3306
CMD ["mysqld_safe"]
[root@vh01 build4]# docker build -t centos:mysql .
[root@vh01 build4]# docker run -P -itd centos:mysql
[root@vh01 build4]# docker exec -it f1ee bash
[root@f1ee66ccc591 /]# mysql -uroot

將vh01設置成為docker倉庫服務器
1、下載倉庫鏡像
[root@vh01 docker_images]# docker load < registry.tar
2、修改docker服務,可以使用本地倉庫
[root@vh01 docker_images]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.4.1:5000
[root@vh01 docker_images]# systemctl daemon-reload
[root@vh01 docker_images]# systemctl restart docker
3、導入的registry鏡像沒有名稱,為其添加名字
[root@vh01 docker_images]# docker tag c9bd19d022f6 registry
4、後臺起動registry
[root@vh01 docker_images]# docker run -id -p 5000:5000 registry
5、鏡像名稱格式是:倉庫名/鏡像名 才能上傳
[root@vh01 docker_images]# docker tag centos:apache 192.168.4.1:5000/centos:apache
[root@vh01 docker_images]# docker images
6、上傳鏡像到倉庫
[root@vh01 docker_images]# docker push 192.168.4.1:5000/centos:apache

準備虛擬機vh02,使期可以使用docker倉庫
1、初始化vh02
vh02.tedu.cn 192.168.4.2/24 selinux firewalld yum
2、在vh02上安裝docker,並設置其可以使用vh01提供的倉庫
[root@vh01 docker]# scp rpm 192.168.4.2:/root
[root@vh02 ~]# yum install -y
rpm
[root@vh02 ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.4.1:5000
[root@vh02 ~]# systemctl daemon-reload
[root@vh02 ~]# systemctl start docker
[root@vh02 ~]# systemctl enable docker
3、下載192.168.4.1的鏡像
[root@vh02 ~]# docker pull 192.168.4.1:5000/centos:apache
4、驗證
[root@vh02 ~]# docker run -id 192.168.4.1:5000/centos:apache
[root@vh02 ~]# docker ps

持久化存儲
1、不要在容器裏存放重要數據,應該將數據存儲在宿主機上
[root@vh02 ~]# docker run -idt -P --name web1 -v /webroot/web1:/var/www/html 192.168.4.1:5000/centos:apache
[root@vh02 ~]# echo ‘<h1>my test</h1>‘ > /webroot/web1/index.html
2、查看容器的端口號
[root@vh02 ~]# docker ps
3、訪問容器的http服務

配置存儲服務器,vh01和vh02上的容器存儲的數據將存放在vh03上
1、準備vh03
vh03.tedu.cn 192.168.4.3 selinux firewalld yum
2、創建nfs共享目錄
[root@vh03 ~]# mkdir -m 777 /nfsroot
3、安裝nfs服務
[root@vh03 ~]# yum install -y nfs-utils
4、配置共享聲明
[root@vh03 ~]# vim /etc/exports
/nfsroot 192.168.4.*(rw,sync)
5、起動服務
[root@vh03 ~]# systemctl restart nfs-server.service
6、查看輸出列表
[root@vh03 ~]# showmount -e 192.168.4.3
7、在vh01和vh02上將共享目錄永久掛載到/dockdir
[root@vh01 docker]# mkdir /dockdir
[root@vh01 docker]# tail -1 /etc/fstab
192.168.4.3:/nfsroot /dockdir nfs defaults 0 0
[root@vh01 docker]# mount -a
8、起動容器,將容器的卷對應到nfs共享中
[root@vh01 docker]# docker run -idt -P -v /dockdir/vh01/web1:/var/www/html 192.168.4.1:5000/centos:apache
[root@vh02 ~]# docker run -idt -P -v /dockdir/vh02/web1:/var/www/html 192.168.4.1:5000/centos:apache

創建自定義網絡
1、創建名為test02的網絡,ip地址使用172.30.0.0/24

docker network create --subnet=172.30.0.0/16 test02

2、起動容器,指定連接的網橋是test02

docker run --network=test02 -idt 192.168.4.1:5000/centos:apache

docker inspect <容器id>

docker 02