首先呢,docker是個容器,就是將你的應用跑在物理機之上,給你擴容出來的一些資源。那麼他與kvm有什麼不一樣呢?其實就是在於分配資源的形式不一樣,kvm是基於硬件資源的分配其實是物理機上運行虛擬機再開應用的一個過程,而docker是基於kernel內存級別的資源隔離。html
docker的過程簡單歸納爲,構建--運輸--運行,是c/s架構,它的組件是鏡像,容器,倉庫前端
Docker CE支持64位版本CentOS 7,而且要求內核版本不低於3.10。 CentOS 7知足最低內核的要求,若是你以前安裝過docekr,或者安裝了老版本的docker,建議先卸載掉。舊版本的 Docker稱爲docker或者 docker-engine,使用如下命令卸載舊版本: [root@localhost ~]# yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine 接着,使用yum在線安裝Docker CE,執行如下命令安裝依賴包: [root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 鑑於國內網絡問題,強烈建議使用國內源,執行下面的命令添加yum軟件源: [root@localhost ~]# yum-config-manager \ --add-repo \ https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo 最後,能夠安裝Docker CE了。 [root@localhost ~]# yum makecache fast [root@localhost ~]# yum install docker-ce 最後,啓動 Docker CE: [root@localhost ~]# systemctl enable docker [root@localhost ~]# systemctl start docker 一、創建docker用戶組 默認狀況下,docker命令會使用Unix socket與Docker引擎通信。而只有root用戶和docker組的用戶才能夠訪問Docker引擎的Unix socket。出於安全考慮,通常Linux系統上不會直接使用root用戶。所以,更好地作法是將須要使用docker的用戶加入docker用戶組。所以,首先創建docker組: [root@localhost ~]# groupadd docker 將當前用戶加入 docker 組: [root@localhost ~]# usermod -aG docker $USER 二、測試 Docker 是否安裝正確 [root@localhost ~]# docker run hello-world 若能正常輸出「Hello from Docker!」以上信息,則說明安裝成功。 鏡像加速配置 國內從 Docker Hub 拉取鏡像有時會遇到困難,此時能夠配置鏡像加速器。Docker 官方和國內不少雲服務商都提供了國內加速器服務 三、能夠在 /etc/docker/daemon.json 中寫入以下內容(若是文件不存在請新建該文件) { "registry-mirrors": [ "https://registry.docker-cn.com" ] } 注意,必定要保證該文件符合 json 規範,不然 Docker 將不能啓動。以後從新啓動服務。 [root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl restart docker 配置加速器以後,若是拉取鏡像仍然十分緩慢,請手動檢查加速器配置是否生效,在命令行執行docker info,若是從結果中看到了以下內容,說明配置成功。 [root@localhost home]# docker info ...... Registry Mirrors: https://registry.docker-cn.com/ Live Restore Enabled: false Product License: Community Engine
鏡像是最基礎的,咱們的容器構建都是在此基礎之上python
# 安裝docker [root@Poppy ~]# yum install docker -y [root@Poppy ~]# systemctl start docker [root@Poppy ~]# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos 7dc0dca2b151: Pull complete Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322 Status: Downloaded newer image for docker.io/centos:latest # 查看鏡像文件 [root@Poppy ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 49f7960eb7e4 4 weeks ago 200 MB docker.io 官網的倉庫,centos剛纔我們pull的鏡像 # 網絡比較慢的時候 導出鏡像 [root@Poppy ~]# docker save 49f7960eb7e4 > /tmp/centos.tar.gz # 導入鏡像 [root@Poppy ~]# docker load < /tmp/centos.tar.gz # 命令解釋 docker pull 其實相似git pull,它是從dockerhub上面下載,這裏面是一些開發人員,運維人員製做的鏡像 docker images 列出機器上全部鏡像 repository 倉庫 標籤 image id是惟一的 建立時間 大小 docker rmi 刪除鏡像,能夠經過image id 若是這個鏡像建立了容器是不會被刪除的
建立容器linux
# 不指定名字建立容器 [root@Poppy ~]# docker run centos /bin/echo "haha" /bin/echo "haha" 命令,若是沒有寫默認就是/bin/bash 1. 運行完退出了 2. 容器沒有指定名字 # 查看容器運行 [root@Poppy ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0a1620b2b5b6 centos "/bin/echo haha" 38 seconds ago Exited (0) 37 seconds ago 容器id 惟一 鏡像 命令 建立時間 狀態 端口 名字 自動生成一個名稱 # 指定名字的容器 [root@Poppy ~]# docker run --name mydocker -t -i centos /bin/bash -t 分配一個僞終端tty -i 容器的標準輸入打開狀態 執行一個命令,這個命令就是/bin/bash [root@3da840f13444 /]# ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 11820 1888 ? Ss 05:58 0:00 /bin/bash 容器的主機名就是容器的id [root@Poppy ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3da840f13444 centos "/bin/bash" 3 minutes ago Up 3 minutes 首先看看本地images有沒有centos鏡像,若是沒有就從dockerhub給你下,利用centos鏡像給你啓動了一個容器
退出容器nginx
# 由於退出了/bin/bash,一個容器啓動時候只能指定一個進程,這個進程退出了,生命週期結束了,容器也就結束了,因此容器適合單進程的一個東西。例如 [root@Poppy ~]# docker start 3da840f13444 3da840f13444 [root@Poppy ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3da840f13444 centos "/bin/bash" 10 minutes ago Up 10 minutes mydocker [root@Poppy ~]# docker attach 3da840f13444 [root@3da840f13444 /]# exit exit [root@Poppy ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS # 咱們看到了attach進入容器以後,退出的話,容器也就結束了,咱們能夠用nsenter進入容器,在退出是不會退出容器的,會在後臺運行 # nsenter 安裝
yum install util-linux
能夠訪問到一個名字空間
要知道pid
[root@Poppy ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@Poppy ~]# docker start 3da840f13444 3da840f13444 [root@Poppy ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3da840f13444 centos "/bin/bash" 14 minutes ago Up 5 seconds mydocker [root@Poppy ~]# docker inspect --format "{{.State.Pid}}" 3da840f13444 獲取容器進程id 19353 [root@Poppy ~]# nsenter --help -t, --target <pid> target process to get namespaces from -u, --uts[=<file>] enter UTS namespace (hostname etc) -i, --ipc[=<file>] enter System V IPC namespace -n, --net[=<file>] enter network namespace -p, --pid[=<file>] enter pid namespace [root@Poppy ~]# nsenter -t 19353 -u -i -n -p [root@Poppy ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3da840f13444 centos "/bin/bash" 20 minutes ago Up 5 minutes 還在運行
用腳本進入容器git
[root@Poppy ~]# cat ns.sh #!/bin/bash #PID=$(docker inspect --format "{{.State.Pid}}" $1) PID=`docker inspect --format "{{.State.Pid}}" $1` nsenter -t $PID -u -i -n -p [root@3da840f13444 ~]#
刪除容器github
[root@Poppy ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3da840f13444 centos "/bin/bash" 26 minutes ago Up 11 minutes mydocker 0a1620b2b5b6 centos "/bin/echo haha" 30 minutes ago Exited (0) 30 minutes ago zen_mccarthy [root@Poppy ~]# docker rm 0a1620b2b5b6 0a1620b2b5b6 [root@Poppy ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3da840f13444 centos "/bin/bash" 26 minutes ago Up 11 minutes 刪除正在運行的須要 -f參數,通常不會這麼幹 # 還有一種方法就是在咱們啓動容器以後執行完命令自動刪除 [root@Poppy ~]# docker run --rm centos /bin/echo "haha" haha [root@Poppy ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3da840f13444 centos "/bin/bash" 28 minutes ago Up 14 minutes # 殺死所有正在的容器進程 # 獲取全部運行的容器的id [root@Poppy ~]# docker ps -a -q 3da840f13444 docker kill $(docker ps -a -q)
1. 隨機映射。 -p
2. 指定端口映射docker
默認docker會使用一個端口映射,讓容器裏面的端口對外json
[root@Poppy ~]# ifconfig docker0
咱們下載一個nginx鏡像,而後啓動一個容器,而後訪問這個nginx,經過不指定端口運行後端
[root@Poppy ~]# docker pull nginx -d: 後臺運行容器,並返回容器ID [root@Poppy ~]# docker run -d -P nginx b9cf97f289630651465fcb3ec492f32c5ea995889378d650d867f5d94bd04e59 [root@Poppy ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b9cf97f28963 nginx "nginx -g 'daemon ..." About a minute ago Up About a minute 0.0.0.0:32768->80/tcp adoring_shaw 本臺機子的32768端口映射到容器的80端口 [root@joker ~]# curl dock_nginx_ip:32768 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> # 容器日誌 [root@Poppy ~]# docker logs b9cf97f28963 客戶端IP - - [04/Jul/2018:06:54:11 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
咱們經過指定端口運行
[root@Poppy ~]# docker run -d -p 81:80 nginx 71a13b6bfe19b9748b5f3c3b09a8da4f27ee20db56992e5e5accc10af2feb07e [root@joker ~]# curl docker_nginx_ip:81 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title>
數據卷
[root@Poppy ~]# docker run -it --name volume-test1 -v /data centos [root@93955824a183 /]# ls -l /data/ total 0 # 查看容器機的物理位置 [root@Poppy ~]# docker inspect volume-test1 "Mounts": [ { "Type": "volume", "Name": "b2d9bd6b3d85ab087ac2952076f12b5401d636646f308950941f686a6ae73d68", "Source": "/var/lib/docker/volumes/b2d9bd6b3d85ab087ac2952076f12b5401d636646f308950941f686a6ae73d68/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], 咱們建立一個文件,看是否同步 [root@Poppy _data]# touch 123 [root@Poppy _data]# pwd /var/lib/docker/volumes/b2d9bd6b3d85ab087ac2952076f12b5401d636646f308950941f686a6ae73d68/_data [root@93955824a183 /]# ls -l /data/ total 0 -rw-r--r-- 1 root root 0 Jul 4 07:13 123 # 有點像nfs,是經過mount方式掛上去的,相似nfs # 指定目錄的掛載 [root@Poppy ~]# docker run -it -v /opt:/opt centos [root@1bc44740396e /]# ls /opt/ daima # 掛在時候還能夠指定權限 /opt:/opt:ro ro只讀 rw讀寫 # 能夠單獨掛載文件 [root@Poppy ~]# docker run -it -v ~/.bash_history:/.bash_history centos [root@e1700ba30895 /]# history 1 history [root@e1700ba30895 /]# ll [root@e1700ba30895 /]# history 1 history 2 ll 3 history 掛文件必須指定文件以爲路徑~/ns.sh,而後是容器的地址 [root@Poppy ~]# docker run -it -v ~/ns.sh:/ns.sh centos
數據卷容器
咱們說的數據卷就是在建立容器的時候指定了一個目錄,而這個目錄會映射到宿主機的某個位置上,而數據卷容器其實就是共享容器的數據卷
[root@Poppy ~]# docker run -d --name nfs -v /data centos 2e3ad584167e7e7c847cc372080d2c77920d92d6930e836b20bb75b3d122ab23 [root@Poppy ~]# docker run -it --name test2 --volumes-from nfs centos [root@41f117a8b203 /]# ls /data/ nfs [root@Poppy ~]# docker inspect 2e3ad584167e "Mounts": [ { "Type": "volume", "Name": "21b12652cd9359374462b252df317e0481c708f6150996588f3b29d2154e612f", "Source": "/var/lib/docker/volumes/21b12652cd9359374462b252df317e0481c708f6150996588f3b29d2154e612f/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], # 咱們在nfs [root@Poppy ~]# cd /var/lib/docker/volumes/21b12652cd9359374462b252df317e0481c708f6150996588f3b29d2154e612f/_data [root@Poppy _data]# ls [root@Poppy _data]# touch hello # 在看test2的/data目錄 [root@41f117a8b203 /]# ls /data/ hello 能夠看出他們共用一個 數據卷容器能夠停,內容依然共享
首先你會有基礎鏡像,也就是操做系統
咱們手動建立一個nginx容器
# 基礎鏡像 centos [root@Poppy ~]# docker pull centos # 建立倉容器 [root@Poppy ~]# docker run --name mynginx -it centos https://mirrors.aliyun.com/epel/ 選擇7 複製連接地址 [root@694e6ee2153b /]# rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm [root@694e6ee2153b /]# yum install -y nginx [root@694e6ee2153b /]# exit [root@Poppy ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 694e6ee2153b centos "/bin/bash" 4 minutes ago Exited (0) 16 seconds ago mynginx 記下id,基於這個容器作個鏡像 [root@Poppy ~]# docker commit -m "my nginx" 694e6ee2153b joker/mynginx:v1 joker 在提交dockhub上須要有個用戶名 mynginx 就是鏡像名 v1 標籤,版本 [root@Poppy ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE joker/mynginx v1 8f96c054de4f About a minute ago 396 MB [root@Poppy ~]# docker run -it --name nginxv1 joker/mynginx:v1 必需要加joker了,否則就是dockerhub.io去找了 v1若是不加默認就是找last # nginx讓它前端運行,後端運行的話,退出就沒了 [root@e0054021410d /]# vi /etc/nginx/nginx.conf [root@e0054021410d /]# cat -n /etc/nginx/nginx.conf|grep daemon 4 daemon off; [root@e0054021410d /]# exit [root@Poppy ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e0054021410d joker/mynginx:v1 "/bin/bash" 3 minutes ago Exited (0) 18 seconds ago # 從新提交 [root@Poppy ~]# docker commit -m "my nginx" e0054021410d joker/mynginx:v2 前臺的 nginx [root@Poppy ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE joker/mynginx v2 0083e3e3eddb 24 seconds ago 396 MB # 啓動前臺的nginx [root@Poppy ~]# docker run -d -p 82:80 joker/mynginx:v2 nginx 最後的nginx就是命令,也就是表明啓動nginx,若是是編譯的話就須要決定路徑 以前咱們沒有寫,默認是/bash,必需要有個命令 [root@Poppy ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f337c774ebf4 joker/mynginx:v2 "nginx" 13 seconds ago Up 12 seconds 0.0.0.0:82->80/tcp confident_golick # 訪問測試 [root@joker ~]# curl docker_nginx_ip:82 <h1>Welcome to <strong>nginx</strong> on Fedora!</h1>
docker build /opt/nginx/Dockerfile
1. 基礎鏡像
2. 維護者信息
3. 鏡像操做指令
4. 容器啓動時執行指令
# 目錄結構 [root@Poppy nginx]# pwd /opt/dockerfile/nginx [root@Poppy nginx]# ll total 8 -rw-r--r-- 1 root root 352 Jul 4 17:09 Dockerfile -rw-r--r-- 1 root root 16 Jul 4 17:09 index.html # Dockerfile 文件寫法 [root@Poppy nginx]# cat Dockerfile # This docker file # VERSION 1 # Author: joker # Base images FROM centos # Maintainer MAINTAINER joker.li xxx@qq.com # Commands RUN rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm RUN yum install -y nginx ADD index.html /usr/share/nginx/html/index.html RUN echo "daemon off;" >> /etc/nginx/nginx.conf 前臺執行 EXPOSE 80 爆漏的端口 CMD["nginx"] 啓動的應用 [root@Poppy nginx]# cat index.html <h1>hello!</h1> # 開始構建 [root@Poppy nginx]# docker build -t joker/mynginx:v3 . .表示當前目錄,注意add添加文件的路徑,也能夠寫絕對路徑,建議去dockerfile的目錄 若是build失敗,從新build,會保留以前錯誤前的位置,就是保留狀態,是按照層一步一步往下執行的,沒過一層都會有提示 Step 5/8 : ADD index.html /usr/share/nginx/html/index.html ---> c1b716296ec8 Removing intermediate container 2ec5ecda9930 Step 6/8 : RUN echo "daemon off;" >> /etc/nginx/nginx.conf ---> Running in 36512ef47738 # 查看鏡像 [root@Poppy nginx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE joker/mynginx v3 1d8814de556c About a minute ago 417 MB # 指定端口映射啓動容器 [root@Poppy nginx]# docker run -d -p 83:80 joker/mynginx:v3 # 參數解釋 ADD 添加文件 EXPOSE 80 開放的端口 CMD["nginx"] 容器啓動之後,默認的執行的命令,若是是編譯就寫入絕對路徑 CMD指令能夠指定容器啓動時要執行的命令,但它能夠被docker run命令的參數覆蓋掉。 ENTRYPOINT 指令和CMD相似,它也可用戶指定容器啓動時要執行的命令,但若是dockerfile中也有CMD指令,CMD中的參數會被附加到ENTRYPOINT 指令的後面。 若是這時docker run命令帶了參數,這個參數會覆蓋掉CMD指令的參數,並也會附加到ENTRYPOINT 指令的後面。 這樣當容器啓動後,會執行ENTRYPOINT 指令的參數部分。 能夠看出,相對來講ENTRYPOINT指令優先級更高。 能夠參考 https://www.cnblogs.com/wq3435/p/6487185.html 這我的的解釋
構建好了容器,如何放在私有倉庫裏面呢?其餘主機可直接pull鏡像就能夠了
# 以前是拷貝出來 dockerhub -- github docker regisry / gitlab 開源倉庫 [root@Poppy ~]# docker images docker.io/registry latest d1fd7d86a825 5 months ago 33.3 MB # 倉庫端口5000 [root@Poppy ~]# docker run -d -p 5000:5000 registry # 測試可否使用 倉庫是v1版本的時候 [root@Poppy ~]# curl docker_server_ip:5000/v1/search 倉庫是v2版本的時候 [root@Poppy ~]# curl docker_server_ip:5000/v2/_catalog {"repositories":[]} # 打一個標籤將鏡像打到倉庫裏 [root@Poppy ~]# docker tag joker/mynginx:v3 docker_server_ip:5000/joker/mynginx:latest [root@Poppy ~]# docker push docker_server_ip:5000/joker/mynginx:latest The push refers to a repository [docker_server_ip:5000/joker/mynginx] Get https://docker_server_ip:5000/v1/_ping: http: server gave HTTP response to HTTPS client # 不讓push,須要https 配置nginx 用戶認證 https [root@Poppy ~]# yum install -y nginx [root@Poppy ssl]# cat /etc/nginx/conf.d/docker-registry.conf upstream docker-registry { server 127.0.0.1:5000; } server { listen 443; server_name registry.joker.com; ssl on; ssl_certificate /etc/ssl/nginx.crt; ssl_certificate_key /etc/ssl/nginx.key; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 0; chunked_transfer_encoding on; location / { auth_basic "Docker"; auth_basic_user_file /etc/nginx/conf.d/docker-registry.htpasswd; proxy_pass http://docker-registry; } location /_ping { auth_basic off; proxy_pass http://docker-registry; } location /v1/_ping { auth_basic off; proxy_pass http://docker-registry; } } # 建立證書 [root@Poppy CA]# pwd /etc/pki/CA [root@Poppy CA]# touch ./{serial,index.txt} [root@Poppy CA]# echo "00" > serial [root@Poppy CA]# openssl genrsa -out private/cakey.pem 2048 Generating RSA private key, 2048 bit long modulus ..................................................+++ ..................................................................+++ e is 65537 (0x10001) # 簽發根證書 [root@Poppy CA]# openssl req -new -x509 -key private/cakey.pem -days 3650 -out cacert.pem You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:joker Organizational Unit Name (eg, section) []:docker Common Name (eg, your name or your server's hostname) []:registry.joker.com Email Address []:joker@qq.com # 建立nginx證書 [root@Poppy ssl]# pwd /etc/ssl [root@Poppy ssl]# openssl genrsa -out nginx.key 2048 [root@Poppy ssl]# openssl req -new -key nginx.key -out nginx.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:joker Organizational Unit Name (eg, section) []:docker Common Name (eg, your name or your server's hostname) []:registry.joker.com Email Address []:joker@qq.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: # 簽發nginx證書 [root@Poppy ssl]# openssl ca -in nginx.csr -days 3650 -out nginx.crt # 讓系統接收一下我們本身簽發的證書 [root@Poppy ssl]# cat /etc/pki/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt # nginx訪問用戶密碼 [root@Poppy ssl]# htpasswd -cb /etc/nginx/conf.d/docker-registry.htpasswd joker 123456 Adding password for user joker # 看可否認證經過 [root@Poppy ssl]# docker login -u joker -p 12345 -e joker@qq.com registry.joker.com # 若是出現問題 [root@Poppy ssl]# docker push docker_server_ip:5000/joker/mynginx:latest The push refers to a repository [docker_server_ip:5000/joker/mynginx] [root@Poppy ssl]# cat /etc/sysconfig/docker # /etc/sysconfig/docker # Modify these options if you want to change the way the docker daemon runs OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry docker_server_ip:5000' 加入了 --insecure-registry docker_server_ip:5000 來解決證書問題 這樣就把我們的手動建立的容器放在了私有倉庫裏,其餘客戶端在用的時候直接pull下來就能夠了
最後咱們就來執行?其實docker是給每一個容器分出來命名空間來實現資源分離?kernel namespace
pid net ipc mnt uts user 消息 文件系統 pid 不一樣的用戶進程使用pid的namespace進行隔離,不一樣的namespace就能夠有相同的pid net 網絡隔離,網橋,咱們在啓動時候不是有個網卡docker0 經過docker ps 能夠看到以下,每一個docker都有一個這樣的 veth15b5d77: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 4a:f6:e1:10:38:5c txqueuelen 0 (Ethernet) RX packets 4718 bytes 341363 (333.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4716 bytes 10770863 (10.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ipc 進程間的交互方法 mnt 掛載 uts 獨立的主機名和域名,用戶態 user uid,gid 在啓動容器的時候,也是能夠指定資源的 -c 權重 -m 內存
最後的最後,管理docker有個可視化工具
shipyard 能夠頁面化管理docker,那你須要讓docker監聽一個tcp地址 監聽tcp端口 [root@Poppy ~]# cat /etc/sysconfig/docker # /etc/sysconfig/docker # Modify these options if you want to change the way the docker daemon runs OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry docker_server_ip:5000 -H tcp://0.0.0.0:235 -H unix://var/run/docker.sock' -H 指定tcp [root@Poppy ssl]# systemctl restart docker 測試 [root@Poppy ~]# curl -s http://docker_server_ip:235/info | python -mjson.tool 以後咱們就能夠將shipyard下載下載安裝使用 http://shipyard-project.com/
更多