1.製做鏡像html
使用阿里的yum源,網址:https://opsx.alibaba.com/mirror,或者mirrors.aliyun.com,點擊幫助,就會有彈框出來.node
docker pull centos # 最好有加速器,要否則下載速度太慢 docker run -it --name thirdcentos centos bash # 發現進入容器以後,不讓我刪以前那些*.repo,正好說明鏡像的只讀特性 yum -y install wget wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y install nginx docker commit -m "install nginx in centos" thirdcentos centos_nginx commit參數說明-a:做者信息,-m:提交消息,-p:提交時暫停容器運行. thirdcentos是正在運行的容器名; centos_nginx是新鏡像的名字,剛下載好的centos是202MB,安裝了一個nginx而後作成鏡像,大小是373MB
在https://hub.docker.com上註冊一個帳號,而後登錄認證mysql
2.上傳鏡像到docker-hublinux
cat ~/.docker/config.json docker search mowang # 就能夠找到我了--docker.io/mowang/taiyangshen docker tag centos_nginx:latest mowang/taiyangshen:centos_with_nginx
推送到taiyangshen這個倉庫裏,centos_with_nginx它實際上是一個標籤,但我一開始沒弄懂,這些步驟能夠執行,可是不規範,倉庫名應該是某個軟件名稱,如:nginx、mysql、redis等,標籤的話應該打上版本號.nginx
docker push mowang/taiyangshen:centos_with_nginx 報錯:denied: requested access to the resource is denied 上網找了半天也沒找到具體的解決辦法,要麼是讓你寫上本身的網站用戶名,要麼是讓你登錄, # 個人解決辦法是:多登錄幾回.
第一次推送的時候用的不是上面那條推送命令,致使直接在docker-hub裏面建立了一個倉庫,而後我想刪了它,發現刪不掉,This deletes the repository, all the images it contains, and its build settings.This cannot be undone.Please type the name of your repository to confirm deletion: centos_nginx.主要仍是英文沒看懂,粘貼到有道里面,翻譯:請輸入存儲庫的名稱以確認刪除:centos_nginx,輸入以後,點擊肯定,而後這個倉庫就被刪了...web
3.端口映射redis
docker run -d --name fourthnginx -P nginx # -P是隨機端口,不實用 在物理機上訪問nginx:http://10.0.0.20:32768 docker run -d -p 80:80 --name fifthnginx nginx # 將宿主機的80端口映射到容器的80 0.0.0.0:80->80/tcp docker run -d -p 10.0.0.20:80:80 --name fifthnginx nginx
4.單臺主機上兩個容器的互聯sql
docker run -d --name web1 -p 80:80 nginx docker run -d --name web2 --link web1:nginx_web1 -p 81:80 nginx docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b6dbf5c77d01 nginx "nginx -g 'daemon ..." 4 seconds ago Up 2 seconds 0.0.0.0:81->80/tcp web2 20d1687b96b7 nginx "nginx -g 'daemon ..." About a minute ago Up About a minute 0.0.0.0:80->80/tcp web1 注意:若是不是官方的nginx,則須要加全路徑,並寫上要執行的命令,如:-p 80:80 my_nginx nginx,前者是鏡像名,後者是要執行的命令. docker exec -it web2 sh cat /etc/hosts ... 172.17.0.2 nginx_web1 20d1687b96b7 web1 172.17.0.3 b6dbf5c77d01 # 你會發現,nginx官方鏡像沒有yum、ping等命令,無法用,因此仍是用centos官方鏡像製做一個nginx鏡像 docker run -it --name runcentos centos_nginx bash # 在/etc/nginx/nginx.conf里加上daemon off,而後製做鏡像 docker commit -m "change nginx conf" runcentos nginx20190217 # 刪除全部鏡像 docker rm $(docker ps -a -q) # 而後重複上面的操做 docker run -d --name web1 -p 80:80 nginx20190217 nginx docker run -d --name web2 --link web1:nginx_web1 -p 81:80 nginx20190217 nginx docker exec -it web2 sh ping nginx_web1 # 能夠ping通
5.實現跨主機互聯docker
linux-docker1:10.0.0.20,--bip=192.168.58.1/24,容器ip爲192.168.58.1, linux-docker2:10.0.0.21,--bip=192.168.158.1/24,容器ip爲192.168.158.1, 在linux-docker1上添加一條靜態路由: route add -net 192.168.158.0/24 gw 10.0.0.21 而後我這是ping不通的,實驗失敗
6.數據管理json
docker run -it --name node --rm -v /opt/:/opt/ nginx20190217 bash # 掛載文件,默認是rw docker run -it --name node --rm -v /etc/hosts:/etc/hosts:ro nginx20190217 bash 用-v建立的容器,刪除的時候也得加上-v,要否則數據刪不了
7.使用Dokcerfile建立鏡像
通常而言,Dockerfile分爲4個部分:基礎鏡像信息;維護者信息;鏡像操做指令;容器啓動時執行指令
cat /root/Dockerfile #第一行必須指定基於的基礎鏡像 FROM centos #維護者信息 MAINTAINER docker_user docker_user@email.com #相關操做 RUN rpm -ivh https://mirrors.aliyun.com/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm RUN yum -y install nginx # add file ADD index.html /usr/share/nginx/html/index.html RUN echo "daemon off;" >> /etc/nginx/nginx.conf # 設置開放端口 EXPOSE 80 # 執行命令 CMD ["nginx"] echo "<h1>this nginx image is installed by Dockerfile</h1>" >/root/docker/index.html docker build -t mowang/nginx /root/docker/
8:搭建docker私庫
cd /opt/ mkdir auth docker run --entrypoint htpasswd registry -Bbn mowang root123 > auth/htpasswd cat auth/htpasswd mowang:$2y$05$Kk3MuTox9ADV96jmV0ldDe7B5gu/wFT4.9gty7/YBZAbJuL2vir2C docker run -d -p 6000:5000 --restart=always --name selfregistry -v `pwd`/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry 2e9b302aa9f58148c20e73da8815f40c5dbf4400960aa50ef2392dc5dd9d8f7c # 能夠登陸,可是不能登陸10.0.0.20:6000,作一下信任便可,下篇博客會寫到 docker login 127.0.0.1:6000
9.單機容器編排
pip install docker-compose cat docker-compose.yml web1: image: nginx expose: - 80 web2: image: nginx expose: - 80 haproxy: image: haproxy volumes: - /opt/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg links: - web1 - web2 ports: - "7777:1080" - "80:80"
docker-compose中的知識點仍是不少的,但講的並很少,之後有時間會單獨寫一篇docker-compose的博文.