主要是docker使用命令
sudo docker daemon -H tcp://0.0.0.0:2375 這條命令將docker守護進程 //使用docker_host環境變量 export DOCKER_HOST = "tcp:0.0.0:2375`
sudo status docker //sudo service docker status
sudo stop docker //sudo service docker stop sudo start docker //sudo service docker start
sudo docker info
sudo docker run -i -t ubuntu /bin/bash //-i標記保證容器是STDIN開啓的 //-t標記告訴docker要建立的容器分配一個僞tty終端 //ubuntu 指定鏡像 // /bin/bash告訴docker容器要運行什麼命令
docker默認爲建立的容器生成一個隨機的名稱,可經過--name標記來給容器命名html
sudo docker run --name myName -i -t ubuntu /bin/bash
sudo docker start myName //也可經過id指定 //也可以使用docker restart命令
docker容器從新啓動的時候,會沿用docker run
命令時指定的參數來運行,所以上例中從新啓動會運行一個交互式的shell,此外也能夠用docker attach
從新附着到該容器的會話上nginx
sudo docker attach myName //也可經過id指定
除了交互式運行的容器,也能夠建立長期運行的容器,守護式容器沒有交互式會話,很是適合運行應用程序和服務。git
sudo docker run --name daemon_name -d ubuntu /bin/sh -c "while true; do echo hello world;sleep 1;done" //-d 標記docker將容器放在後臺運行 //while循環一直打印hello world
docker ps //查看正在運行的容器 docker ps -a //查看全部的容器
docker logs daemon_name //獲取容器的日誌,可經過-f來追蹤日誌
docker1.6開始,可經過--log-driver
選項來控制docker守護線程和容器全部的日誌驅動,能夠在執行docker守護線程或者執行docker run
命令時使用這個選項。github
sudo docker run --log-driver="syslog" --name daemon_name -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" //將daemon_name容器的日誌輸出到syslog,致使docker logs命令不會輸出任何東西
sudo docker top daemon_name
sudo docker exec -d daemon_name touch /etc/new_config_file //-d 標記運行一個後臺進程 後面明智執行名氣的名字以及執行的命令 sudo docker exec -t -i daemon_name /bin/bash //建立TTY並捕捉STDIN
sudo docker stop daemon_name
sudo docker inspect daemon_name //查看更多容器的信息 //該命令也可用來查看鏡像信息
sudo docker rm 80430f8d0921 //經過指定容器id //刪除所有容器 sudo docker rm `sudo docker ps -a -q` //-q標記表示只返回容器的id
sudo docker images //本地鏡像都保存在docker宿主機的/var/lib/docker目錄i西安,每一個鏡像都保存在docker所採用的存儲驅動目錄下面,如aufs或者devicemapper,也能夠在/var/bin/docker/containers目錄下看到全部容器
sudo docker pull ubuntu:12.04
sudo docker run -t -i --name new_container ubuntu:12:04 /bin/bash
能夠經過docker search
命令來查找全部docker hub
上公共的可用鏡像web
sudo docker search puppet NAME DESCRIPTION STARS OFFICIAL AUTOMATED puppet/puppetserver A Docker Image for running Puppet Server. Wi… 75 alekzonder/puppeteer GoogleChrome/puppeteer image and screenshots… 51 [OK]
如今並不推薦使用docker commit命令,而應該使用更靈活、更強大的dockerfile來構建docker鏡像docker
通常來講都是基於已有的基礎鏡像,而不是「建立」新鏡像,從0開始能夠參考:https://docs.docker.com/develop/develop-images/baseimages/shell
建立完鏡像以後,能夠將鏡像推送到docker hub或者私有的registryzhong,完成這個操做須要在docker hub上建立一個帳號。
https://hub.docker.com/signupapache
sudo docker login Username: Password: Login Succeeded
//建立一個新容器 sudo docker run -i -t ubuntu /bin/bash //在容器內部安裝一些軟件... //獲得剛剛建立容器的id docker ps -l -q 9649de16bffb //提交定製容器 sudo docker commit 9649de16bffb dack/apache2 //檢查新建立的鏡像 docker images dack/apache2 REPOSITORY TAG IMAGE ID CREATED SIZE dack/apache2 latest 2c5cd556c3f2 About a minute ago 209MB
也能夠在提交鏡像時指定更多的數據(包含標籤)來詳細描述所作的修改ubuntu
sudo docker commit -m "A new custom image" -a "dack huang" 9649de16bffb dack/apache2:webserver //-m 提交信息 //-a 做息信息 //dack/apache2:webserver 執行鏡像的用戶名和倉庫名,併爲該鏡像增長一個webserver的標籤
並不推薦用docker commit
構建鏡像,相反推薦使用Dockerfile
的定義文件和docker build
來構建鏡像緩存
Dockerfile
使用基本的基於DSL(Domain Specific Language)
語法的指令來構建一個docker
鏡像,對比docker commit
,其更具有可重複性、透明性和冪等性。
保存Dockerfile
的目錄稱爲上下文,docker
會在構建鏡像時將構建的上下文和該上下文的文件和目錄上傳到docker
守護進程。這樣docker
守護進程就能夠直接訪問用戶想在鏡像中存儲的任何代碼、文件或者其餘數據。
dockerfile
中每條指令從上到下依次執行,大致的流程以下:
因此儘管某一步執行失敗了,仍是獲得一個可使用的鏡像
# Version : 0.01 FROM ubuntu:14.04 MAINTAINER dack huang "dack_huang@163.com" RUN apt-get update && apt-get install -y nginx RUN echo 'Hi, I am in your container' \ >/usr/share/nginx/html/index.html EXPOSE 80 FROM //指定基礎鏡像 MAINTAINER //指定鏡像做者 RUN //在當前鏡像中運行的命令,默認在shell裏面使用/bin/sh -c執行 EXPOSE //應用程序會使用容器指定的接口
經過docker build
構建鏡像
docker build -t="dack/static_web" //-t設置鏡像標籤 //從git倉庫上面構建鏡像 //假設這個git倉庫存在Dockerfile docker build -t="dack/static" git@github.com:dack/docker-static_web
docker將每一步的構建過程都提交爲鏡像,因此docker會將以前的鏡像層當作緩存,當修改某個步驟以後再次構建的,docker會直接從該步驟開始。
可用docker build --no-cache
略過緩存
docker build --no-cache -t="dack/static_web"
docker history
查看鏡像的每一層
[root@dack static_web]# docker history e5f55354c141 IMAGE CREATED CREATED BY SIZE COMMENT e5f55354c141 5 hours ago /bin/sh -c #(nop) EXPOSE 80 0B 66d44cca6536 5 hours ago /bin/sh -c echo 'Hi, I am in your container'… 27B 022c0b46f4f8 5 hours ago /bin/sh -c apt-get update && apt-get install… 34.3MB 34d2d2b790f5 5 hours ago /bin/sh -c #(nop) MAINTAINER dack huang "da… 0B 390582d83ead 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 3 weeks ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B