docker倉庫和dockerfile

 經過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私有鏡像倉庫

環境要求與準備

Harbor以容器的形式進行部署, 所以能夠被部署到任何支持Docker的Linux發行版, 而且具有以下環境:

  • Python2.7+
  • Docker Engine 1.10+
  • Docker Compose 1.6.0+

這裏使用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

訪問harbor報錯502 Bad Gateway

#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

相關文章
相關標籤/搜索