1,Docker安裝
Docker是啥,以及其與虛擬機的對比,就不介紹了,網上有很多資源可以學習和了解。
本篇文章重點介紹Docker的安裝和測試使用。
- Docker的安裝,分為離線安裝和在線安裝兩種方式,方便不同的應用場景使用不同的安裝方式。
- 關於Docker的測試使用,本文會介紹如何運行Docker容器、如何修改Docker容器,以及如何完成Docker容器到Docker鏡像的轉化。
1.1,docker離線安裝
很簡單,從官網下載最新的docker離線安裝包,並安裝。
# wget https://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_17.05.0~ce-0~ubuntu-trusty_amd64.deb # wget http://archive.ubuntu.com/ubuntu/pool/main/libt/libtool/libltdl7_2.4.6-0.1_amd64.deb # dpkg -i *.deb
1.2,docker在線安裝
通過apt-get安裝
# cat /etc/issue Ubuntu 14.04.5 LTS \n \l # uname -r 4.4.0-81-generic # sudo apt-get update # 更新系統資源列表 # apt-get -y install docker.io # 安裝docker # docker -v # 查看docker版本信息 Docker version 1.6.2, build 7c8fca2
通過daocloud安裝docker
# curl -sSL https://get.daocloud.io/docker | sh # docker -v Docker version 17.06.0-ce, build 02c1d87
通過阿里雲的鏡像倉庫安裝docker
# curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh - # docker -v Docker version 17.05.0-ce, build 89658be
1.3,執行docker,驗證docker是否安裝成功
# docker
Usage: docker COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker") -D, --debug Enable debug mode --help Print usage -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem") --tlskey string Path to TLS key file (default "/root/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit
- 1
1.4,用戶權限修改
安裝成功之后,需要使用root用戶才能執行docker命令。
如果希望用非root用戶執行docker命令,可以執行以下語句。
注意:執行完成后,需要退出再登陸才能生效。
# sudo usermod -aG docker $your-user
- 1
2,術語介紹
Docker有倉庫Repositories、鏡像Images和容器Container三大核心,三者可以互相轉化。
- Docker,平台工具、守護進程
- Image,鏡像,包括應用及系統的只讀數據包
- Container,容器,虛擬機的運行實例
- Registry,倉庫登記,管理鏡像文件
- Docker hub,Docker官方公有倉庫
三大核心的關系,如下圖所示:

3,創建鏡像
Docker鏡像的創建方式有兩種,分別是:
- 基於現有的鏡像修改
- 直接創建新鏡像
本文介紹基於已有的鏡像修改的方式,一共分為五步。
3.1,第一步,下載官網的基礎鏡像
從官網上pull鏡像hello-world,並運行
root@apple:/home/kevin/docker# docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world b04784fba78d: Pull complete Digest: sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/
從官網上pull鏡像ubuntu,並以交互方式運行
root@apple:/home/kevin/docker# docker run -it ubuntu bash Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu e0a742c2abfd: Pull complete 486cb8339a27: Pull complete dc6f0d824617: Pull complete 4f7a5649a30e: Pull complete 672363445ad2: Pull complete Digest: sha256:84c334414e2bfdcae99509a6add166bbb4fa4041dc3fa6af08046a66fed3005f Status: Downloaded newer image for ubuntu:latest root@93a1b9d39683:/# root@93a1b9d39683:/# root@93a1b9d39683:/# root@93a1b9d39683:/# root@93a1b9d39683:/#
3.2,第二步,在CONTAINER中執行軟件的安裝
安裝Linux基礎軟件
在第一步的基礎上,在容器里面,用root用戶執行Linux基礎軟件的安裝。
root@93a1b9d39683:/home# apt-get update Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB] Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB] Get:4 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [42.0 kB] Get:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [384 kB] Get:6 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB] Get:7 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB] Get:8 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.8 kB] Get:9 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [178 kB] Get:10 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [2931 B] Get:11 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB] Get:12 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB] Get:13 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB] Get:14 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB] Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [207 kB] Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [742 kB] Get:17 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.3 kB] Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [640 kB] Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [16.8 kB] Get:20 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [4930 B] Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [6237 B] Fetched 24.2 MB in 12min 34s (32.1 kB/s) Reading package lists... Done root@93a1b9d39683:/home# apt-get install vim root@93a1b9d39683:/home# apt-get install curl root@93a1b9d39683:/home# apt-get install openssh-server root@93a1b9d39683:/home# apt-get install python # 安裝ifconfig、netstat root@93a1b9d39683:/home# apt-get install net-tools # 安裝ping root@93a1b9d39683:/home# apt-get install iputils-ping
退出CONTAINER
- ctrl+d,退出容器且關閉,docker ps查看容器已退出運行(Exited)
- ctrl+p,ctrl+q,退出容器但不關閉,docker ps查看容器依然處於Up狀態
3.3,第三步,將CONTAINER保存為IMAGE
查看容器列表
root@apple:/home/kevin/docker# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 966bd52b72da ubuntu "/bin/sh -c 'while..." 3 hours ago Exited (137) 2 hours ago stupefied_knuth 568e5204fff3 ubuntu "/bin/sh -c 'while..." 4 hours ago Exited (137) 2 hours ago kind_khorana 00f561d97811 ubuntu "/bin/echo hello w..." 4 hours ago Exited (0) 4 hours ago nifty_mcnulty 93a1b9d39683 ubuntu "bash" 4 hours ago Up 3 hours zealous_noether abdc084f9821 hello-world "/hello" 4 hours ago Exited (0) 3 hours ago sleepy_clarke 51097978fdc6 hello-world "/hello" 4 hours ago Exited (0) 3 hours ago vibrant_panini
查看鏡像列表
root@apple:/home/kevin/docker# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 14f60031763d 3 days ago 120MB hello-world latest 1815c82652c0 5 weeks ago 1.84kB
保存容器到鏡像
root@apple:/home/kevin/docker# docker commit 93a1b9d39683 learn/visual_init:v1
sha256:56a4eab7dc5b9c1b0dca010e36f4e792963a213ad4b362ab4662602eb66f0216
============== Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]Create a new image from a container's changes -a, --author="" Author (e.g., "John Hannibal Smith <hannibal@a-team.com>") -m, --message="" Commit message -p, --pause=true Pause container during commit ==============
查看鏡像列表
root@apple:/home/kevin/docker# docker images REPOSITORY TAG IMAGE ID CREATED SIZE learn/visual_init v1 56a4eab7dc5b 39 seconds ago 321MB ubuntu latest 14f60031763d 3 days ago 120MB hello-world latest 1815c82652c0 5 weeks ago 1.84kB
附,容器的常用操作
root@apple:/home/kevin/docker# docker attach $CONTAINER_ID #連接一個已存在的docker容器 root@apple:/home/kevin/docker# docker stop $CONTAINER_ID #停止docker容器 root@apple:/home/kevin/docker# docker start $CONTAINER_ID #啟動docker容器 root@apple:/home/kevin/docker# docker restart $CONTAINER_ID #重啟docker容器 root@apple:/home/kevin/docker# docker kill $CONTAINER_ID #強制關閉docker容器 root@apple:/home/kevin/docker# docker logs $CONTAINER_ID #查看docker容器運行日志,確保正常運行 root@apple:/home/kevin/docker# docker inspect $CONTAINER_ID #查看container的屬性,比如ip等等 root@apple:/home/kevin/docker# docker rm $CONTAINER_ID # 刪除容器
3.4,第四步,將IMAGE上傳到倉庫,或者保存為本地離線文件
push image到阿里雲的私有鏡像倉庫
# docker login --username=670590744@qq.com registry.cn-beijing.aliyuncs.com # docker tag 56a4eab7dc5b registry.cn-beijing.aliyuncs.com/zhangsp/aiwen:visual_init # docker push registry.cn-beijing.aliyuncs.com/zhangsp/aiwen:visual_init
上傳成功,如下圖所示

保存docker image為本地文件,然后,可以在其他機器上還原使用
root@apple:/home/kevin# docker images REPOSITORY TAG IMAGE ID CREATED SIZE learn/visual_init v1 56a4eab7dc5b 3 minutes ago 321MB registry.cn-beijing.aliyuncs.com/zhangsp/aiwen visual_init 56a4eab7dc5b 3 minutes ago 321MB ubuntu latest 14f60031763d 3 days ago 120MB hello-world latest 1815c82652c0 5 weeks ago 1.84kB # 將docker image保存為離線的本地文件,執行docker save image_name > ./save.tar 或者 docker save -o filepath image_name root@apple:/home/kevin/docker# docker save -o visual_init.tar 56a4eab7dc5b root@apple:/home/kevin/docker# ll total 344956 drwxrwxr-x 2 kevin kevin 4096 Jul 24 08:14 ./ drwxr-xr-x 14 kevin kevin 4096 Jul 24 03:07 ../ -rw-rw-r-- 1 kevin kevin 19182004 May 5 13:03 docker-engine_17.05.0~ce-0~ubuntu-trusty_amd64.deb -rw-rw-r-- 1 kevin kevin 38292 Feb 7 2016 libltdl7_2.4.6-0.1_amd64.deb -rw------- 1 root root 333993472 Jul 24 08:13 visual_init.tar
3.5,第五步,在其他機器上還原IMAGE測試使用
- 加載一個docker鏡像文件,執行docker load -i filepath 或者 docker load < ./save.tar
- 執行docker pull 或者 docker run,運行倉庫的image鏡像
aiwen@703:~$ docker pull registry.cn-beijing.aliyuncs.com/zhangsp/aiwen:visual_init visual_init: Pulling from zhangsp/aiwen e0a742c2abfd: Pull complete 486cb8339a27: Pull complete dc6f0d824617: Pull complete 4f7a5649a30e: Pull complete 672363445ad2: Pull complete 6f2c8900b1ea: Pull complete Digest: sha256:faf4284d0980958df3c10c49efcc09a041dc894edd54e29304fb7fbe97c674dc Status: Downloaded newer image for registry.cn-beijing.aliyuncs.com/zhangsp/aiwen:visual_init
- 備注:導入IMAGE之后,可以通過docker tag命令對IMAGE打標簽
kevin@
4,參考頁面
- 離線安裝docker
http://blog.csdn.net/wn527518/article/details/53160116 - 通過daocloud在線安裝docker
http://get.daocloud.io/#install-docker - 通過阿里雲的鏡像倉庫安裝docker
http://mirrors.aliyun.com/help/docker-engine?spm=a2c1q.8351553.0.0.468c7ecbF2260n - 時速雲
https://www.tenxcloud.com/caas.html - 網易雲
https://c.163.com/ - 騰訊雲的容器服務
https://cloud.tencent.com/product/ccs - 百度雲的容器服務
https://cloud.baidu.com/product/bae.html
https://cloud.baidu.com/doc/BAE-Pro/GUIGettingStarted.html#.E8.87.AA.E5.AE.9A.E4.B9.89.E9.95.9C.E5.83.8F - docker的版本升級記錄
https://github.com/moby/moby/releases - Docker之常用命令
http://blog.chinaunix.net/uid-10915175-id-4443127.html
