經過Dockerfile建立鏡像html
Dockerfilenode
• Dockerfile語法格式python
– FROM:基礎鏡像 nginx
– MAINTAINER:鏡像建立者信息git
– COPY:複製文件到鏡像(全部文件複製場合)
github
– ENTRYPOINT:容器啓動時執行的命令(CMD的內容將會做爲參數傳遞給NENTRYPOINT)web
– VOLUME:卷docker
– USER:指定當前用戶(要事先建立目錄)json
– EXPOSE:開放的端口vim
– ENV:設置變量
– HEALTHCHECK:健康性檢查
– ADD:複製文件到鏡像(僅在須要自動解壓縮的場合使用)
– RUN:製做鏡像時執行的命令,能夠有多個
– WORKDIR:定義容器默認工做目錄(要事先建立目錄)
– CMD:容器啓動時執行的命令,僅能夠有一條CMD
看容器內端口起沒起:# docker top ed39b0c55906
ctrl+z bg 後臺運行並查看
排錯:若是在啓動容器的時候,提示iptables的相關問題,沒法啓動容器,能夠執行如下操做:
(1)查看iptables是否正常
[root@room8pc30 ~]# iptables -t nat -nL # 若是隻看到有限的4個CHAIN,裏面又沒有規則,說明iptables有誤
(2)關閉docker
[root@room8pc30 ~]# systemctl stop docker.service
(3)清空nat表
[root@room8pc30 ~]# iptables -t nat -F
(4)刪除docker0網絡
[root@room8pc30 ~]# ifconfig docker0 down
[root@room8pc30 ~]# brctl delbr docker0
(5)啓動docker
[root@room8pc30 ~]# systemctl start docker.service
(6)查看iptables,若是發現多出了不少規則,意味着已經恢復默認配置
[root@room8pc30 ~]# iptables -t nat -nL
鏡像優化:
一、每一個容器只運行一個進程
二、不要假定容器可以久遠保持啓動狀態
三、使用.dockerignore文件將不須要的文件進行排除。
四、不要徹底本身製做鏡像,應該使用官方提供的鏡像
五、儘可能減小鏡像的層數。如不要運行多個RUN,而是將多個命令放到一個RUN中執行
運行最小的鏡像
# docker run busybox echo Hello World
經過centos 基礎境像製做一個新的鏡像
配置yum
安裝ifconfig
安裝openssh-server httpd
設置sshd和httpd在運行容器時默認開啓
經過root(密碼123456)和ssh服務 能夠遠程鏈接容器
能夠遠程訪問web
多臺web共享數據 局域網內共享
物理機:
#mkdir /chroot
#yum -y install nfs-utils
#vim /etc/exports
/chroot 192.168.4.0/24(rw)
#systemctl start nfs
#ls -R/abc:
Dockerfile rh7.repo(yum倉庫) run.sh
#vim Dockerfile
FROM centos
MAINTAINER wangshu wangshu78123@163.com
RUN rm -rf /etc/yum.repos.d/*
ADD rh7.repo /etc/yum.repos.d/rh7.repo
RUN yum clean all
RUN yum repolist all
RUN yum -y install net-tools psmisc httpd openssh-server
RUN echo 123456 | passwd --stdin root
EXPOSE 22
EXPOSE 80
ADD run.sh /usr/sbin/run.sh
CMD ["/usr/sbin/run.sh"]
#vim run.sh
#!/bin/bash
EnvironmentFile=/etc/sysconfig/sshd
/usr/sbin/sshd-keygen &>/dev/null
/usr/sbin/sshd
EnvironmentFile=/etc/sysconfig/httpd
/usr/sbin/httpd -DFOREGROUND
#chmod 755 run.sh
#echo aaa > /chroot/index.html
#docker build -t myos .
#docker run -d -p 80:80 -p 10022:22 -v /chroot:/var/www/html myos
3 私有倉庫
自定義鏡像倉庫和docker hub
registry基本概念
• 共享鏡像的一臺服務器(鏡像化的一臺服務器)
建立私有倉庫
方法1
[root@s62 simple6]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.122.2:5000 --registry-mirror=http://aad0405c.m.daocloud.io
方法2
#cat /etc/docker/daemon.json
{
"insecure-registries" : ["192.168.2.10:5000"]
}
[root@s62 simple6]# systemctl daemon-reload(重載配置文件)
[root@s62 simple6]# systemctl restart docker
[root@s62 simple6]# docker run -id -p 5000:5000 registry //啓動容器映射端口
[root@s62 simple6]# docker tag a:label 192.168.122.2:5000/a:label //打標籤 /鏡像a
[root@s62 simple6]# docker push 192.168.122.2:5000/a:label 上傳
[root@s62 simple6]# docker rmi 192.168.122.2:5000/a:label //先刪除本地鏡像
[root@s62 simple6]# docker run -itd 192.168.122.2:5000/a:label
[root@s62 simple6]# firefox http://192.168.122.2:5000/v2/_catalog //查看遠程鏡像
[root@s62 simple6]#firefox http://192.168.122.2:5000/v2/_catalog /鏡像名/tags/list //查看鏡像標籤
Harbor以容器的形式進行部署, 所以能夠被部署到任何支持Docker的Linux發行版, 而且具有以下環境:
這裏使用CentOS7.3的系統, Python2.7系統自帶了, 剩下的就是安裝Docker和Compose:
[root@harbor01 ~]# yum install docker -y [root@harbor01 ~]# yum -y install epel-release [root@harbor01 ~]# yum install python-pip -y [root@harbor01 ~]# pip install docker-compose (pip install -U -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose) # 查看安裝完成的Docker和Compose的版本 [root@harbor01 ~]# docker version
[root@harbor01 ~]#docker-compose --version
下載harbor包
wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz
openssl req -x509 -days 3650 -nodes -newkey rsa:2048 -keyout /data/cert/server.key -out /data/cert/server.crt
Common Name (eg, your name or your server's hostname) []: harbor.wangshu.cn //域名
cd harbor/ && ./prepare
./install.sh
啓動Harbor
解壓完事後再harbor目錄下有一個install.sh, 執行它來進行安裝
[root@harbor01 harbor]# ./install.sh [root@harbor01 harbor]# docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------ harbor-adminserver /harbor/start.sh Up harbor-db /usr/local/bin/docker-entr ... Up 3306/tcp harbor-jobservice /harbor/start.sh Up harbor-log /bin/sh -c /usr/local/bin/ ... Up 127.0.0.1:1514->10514/tcp harbor-ui /harbor/start.sh Up nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp registry /entrypoint.sh serve /etc/ ... Up 5000/tcp
而後訪問: https://harbor.wangshu.cn
#tail -100 /var/log/harbor/adminserver.log
#tail -100 /var/log/harbor/jobservice.log
緣由是咱們指定的secretkey_path 路徑建立的文件沒有權限
還原設置secretkey_path的路徑爲/data
切換harbor的安裝目錄執行如下操做
[root@localhost harbor]#docker-compose down
[root@localhost harbor]#rm -rf /data/secretkey
[root@localhost harbor]#./prepare
[root@localhost harbor]#docker-compose up –d
登陸時報錯:
Error response from daemon: Get https://registry.niudingfeng.com/v1/users/: x509: certificate signed by unknown authority
此種狀況多發生在自簽名的證書,報錯含義是簽發證書機構未經認證,沒法識別。
把harbor上的server.crt上傳到任意docker上
chmod 644 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
cat server.crt >>/etc/pki/tls/certs/ca-bundle.crt
chmod 444 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
systemctl restart docker
證書是docker的daemon須要用到的,重啓docker服務:
注意:
docker client解析不了域名的必需要加hosts