Docker 的核心理念是 Build, Ship, and Run Any App, Anywher
,即一次封裝,處處運行。linux
從前,咱們在服務器配置一個應用的運行環境,要安裝各類組件,就拿 JavaWeb 的環境來講吧,要安裝 Tomcat、MySQL 等。安裝和配置這些東西有多麻煩就不說了,它還不能跨平臺。假如咱們是在 Windows 上安裝的這些環境,到了 Linux 又得從新裝。何況就算不跨操做系統,換另外一臺一樣操做系統的服務器,要移植應用也是很是麻煩的。nginx
Linux 容器技術
的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。將應用運行在 Docker 容器
上面,而 Docker 容器在任何操做系統上都是一致的,這就實現了跨平臺、跨服務器。只須要一次配置好環境,換到別的機子上就能夠一鍵部署好,大大簡化了操做。web
這裏我主要介紹一下 Docker 在 Ubuntu 和 Windows 中的安裝。其餘的操做系統可自行搜索安裝教程。docker
因爲 Docker 官網在國內的訪問速度很差,因此這裏推薦去 DaoCloud
下載鏡像,速度很是快:segmentfault
https://get.daocloud.io/#inst...windows
先進入到 Docker 的下載頁面:瀏覽器
https://get.daocloud.io/#inst...bash
若是是 win10 系統就直接下載 Docker for Windows
,若是是 win10 以前的系統就下載Docker Toolbox
。下載完成以後默認一直點下一步就安裝完成了。服務器
注意:windows 運行 Docker 須要在 BIOS 中開啓
Intel Virtual Technology
,若是打不開 Docker 並提示有該類錯誤請自行根據本身電腦型號搜索相關教程。
$ sudo apt-get update $ sudo apt-get install docker.io
$ curl -sSL https://get.daocloud.io/docker | sh
docker version
命令查看 docker 版本信息。
注意:正常狀況下,應該顯示出 Client 和 Server 的信息,若是沒有 Server 的信息,則表明服務沒有啓動。此時須要用
service docker start
命令啓動它。
若是裝錯版本了能夠卸載了從新裝curl
$ sudo apt-get remove --purge docker.io $ rm -rf /var/lib/docker
Docker 有三大核心概念:
Docker 利用倉庫管理鏡像的設計與 Git 很是類似。咱們要配置的應用運行環境就是鏡像,如 nginx 鏡像,當咱們本地沒有該鏡像的時候,就須要從遠程倉庫 pull 下來,當咱們啓動這個鏡像時,就會有一份鏡像被複制並運行在容器中。若是咱們改動了容器裏面的內容,也能夠將其 commit 保存成新的鏡像。
這裏以 Nginx 爲例來演示在 docker 中啓動一個應用的過程。
啓動 Nginx 分爲 三步:
首先要 Docker 官方倉庫 裏搜索 nginx,找到帶有 official
字樣的,點進去把 pull 命令複製下來。
執行該條命令就把鏡像 pull 到本地了。執行「docker images」便可查看本地鏡像。
其實 docker pull nginx
這條命令是簡寫形式,完整命令應該是:
$ docker pull registry.hub.docker.com/library/nginx
完整的命令是在 nginx 前面加上了 註冊服務器的地址
,因爲 docker pull 的默認地址是這個,因此該地址是能夠不加的。
爲何要說這個呢,由於從官方倉庫下載鏡像實在是很是的慢,有時候還下載不了。若是咱們更改了這個註冊服務器的地址,把它換成國內的,就能夠實現加速。
國內有很是多的鏡像倉庫,本文介紹使用阿里雲的,後文咱們也會介紹把本身的鏡像上傳到阿里雲,而且該服務是免費的。
訪問這個地址:
https://cr.console.aliyun.com...
若是沒有阿里雲帳號的就本身註冊一個。在上面這個地址的頁面就能夠看到本身的專屬加速地址了,而且有不一樣系統的安裝方法,根據給的教程安裝便可。
pull 了鏡像以後,執行如下命令就能夠啓動它了。
$ docker run -d nginx
這條命令是後臺啓動 nginx ,不加 -d
就是前臺啓動。啓動了以後咱們暫時仍是沒法訪問帶它的,咱們還須要將容器內的 nginx 端口映射到容器外面,才能夠訪問到。
$ docker run -d -p 8080:80 nginx
跟上條命令比起來只加了一個 -p
參數,後面跟上端口,這裏我是把本機的 8080 端口映射到 容器內的 80 端口上,瀏覽器訪問 localhost:8080
就能夠看到 nginx 的歡迎頁面了。
$ docker images
$ docker tag old-tag new-tag
新的標籤跟原標籤鏡像的 ID 是徹底同樣的,它們實際上都指向同一個鏡像文件,只是別名不一樣而已。
$ docker rmi image-id/image-tag
注意:刪除鏡像須要先刪除使用了此鏡像的容器,雖然能夠強制刪除,可是並不推薦這麼作。另外刪除鏡像,能夠用 tag 或 ID 刪除,若是 ID 是同樣的就用 tag 刪除
$ docker ps
$ docker stop container-id
容器的 ID 不須要所有輸完,只要能區分兩個容器就能夠了。
$ docker ps -a
$ docker rm container-id
刪除容器以前須要先中止它
$ docker commit container-id image-tag
特別注意:若是更改了容器後不將它保存爲新的鏡像,在容器被刪除後,全部的更改都不會被保存。下一文會介紹另 Docker 的數據存儲能夠解決這個問題。另外,此命令後面的 tag 能夠不寫只寫名字,默認 latest。
$ docker exec -it container bash
Docker 容器也有一個類 Linux 的文件系統,還能夠用一些 linux 命令。要退出容器可輸入
exit
注意:有的鏡像是沒有帶 bash 的,好比 docker pull daocloud.io/library/nginx:1.13.8-alpine-perl
,這條命令就會報錯,這時就能夠用 sh 創建鏈接:
$ docker exec -it container /bin/sh
$ docker cp file container-id:newfile
$ docker cp container-id:file newfile
複製容器內的文件到容器外命令是在容器外執行的
$ docker save -o name.tar image-tag
$ docker load --input name.tar
$ docker export -o name.tar container-id
容器導入實際上是導成了鏡像。
先來了解一下 docker 是如何管理倉庫和鏡像的。
倉庫是放在註冊服務器上的,一個倉庫只管理一個鏡像,一個鏡像能夠有多個版本。
Create Repository
,在以下頁面建立一個倉庫。
stormxing/web-server
stormxing-webserver
,若是版本不填寫就默認是 latest。
雖然 Docker Hub 能夠 push 鏡像,可是速度太慢了。最好仍是用國內的速度比較快,這裏介紹阿里雲的。
本篇文章主要介紹了Docker 的做用、Docker 三大核心
(倉庫、鏡像、容器)的基本操做,還介紹瞭如何 push 本身的鏡像到遠程倉庫。
下一篇文章 將介紹 Docker 的數據管理和用更高級的方式 Dockerfile
來建立鏡像以及 docker-compose 的簡單使用。