首頁 >系統教程 >Linux >Docker快速入門五分鐘

Docker快速入門五分鐘

WBOY
WBOY轉載
2024-01-02 14:29:52869瀏覽
Docker 是什麼?

Docker 是一個開源的容器引擎,而一個容器其實是一個虛擬化的獨立的環境,因此開發者可以將應用程式打包到這樣的一個docker 容器中,然後發佈到任何可以運行docker 容器的機器中,實現一次打包多處部署,解決了因為環境問題而導致的部署難題。

與 容器 對應的一個概念就是 鏡像,鏡像可以看做我們平時裝系統的鏡像,裡面就是一個運作環境。當然我比較喜歡將鏡像比喻為一個我們物件導向程式設計中的 類,而一個容器就是一個類別的 實例,因此可以根據一個鏡像,創建出很多個容器。每一個容器都是具體的,我們可以在容器上面做出更改,然後再把這個容器打包成一個新的鏡像,以便以後可以根據改動後的鏡像創建出新的容器。而容器本身可以簡單理解為是一個虛擬獨立的運作環境,我們要做的是在中這個環境中打包我們的應用,以便於再次部署。
Docker快速入門五分鐘

安裝 Docker

Gentoo

# emerge --ask docker

CentOS

# yum install docker-ce

Ubuntu

# apt-get install docker-ce

Arch

# pacman -S docker
啟動 docker 守護程式
# systemctl start docker
docker 指令介紹
# docker --help
管理命令:
  container   管理容器
  image       管理镜像
  network     管理网络
命令:
  attach      介入到一个正在运行的容器
  build       根据 Dockerfile 构建一个镜像
  commit      根据容器的更改创建一个新的镜像
  cp          在本地文件系统与容器中复制 文件/文件夹
  create      创建一个新容器
  exec        在容器中执行一条命令
  images      列出镜像
  kill        杀死一个或多个正在运行的容器    
  logs        取得容器的日志
  pause       暂停一个或多个容器的所有进程
  ps          列出所有容器
  pull        拉取一个镜像或仓库到 registry
  push        推送一个镜像或仓库到 registry
  rename      重命名一个容器
  restart     重新启动一个或多个容器
  rm          删除一个或多个容器
  rmi         删除一个或多个镜像
  run         在一个新的容器中执行一条命令
  search      在 Docker Hub 中搜索镜像
  start       启动一个或多个已经停止运行的容器
  stats       显示一个容器的实时资源占用
  stop        停止一个或多个正在运行的容器
  tag         为镜像创建一个新的标签
  top         显示一个容器内的所有进程
  unpause     恢复一个或多个容器内所有被暂停的进程

在子命令中還有更多豐富的選項,可以使用 docker COMMAND --help 檢視。例如:

# docker run --help

docker 使用實戰

接下來,我將利用 docker 部署一個 Nginx 伺服器,作為講解的範例。要建立一個容器,那麼我們必須先要有一個用於建立容器的鏡像。在 docker hub 中尋找 nginx 相關映像。

# docker search nginx
NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                                  Official build of Nginx.                        6959      [OK]
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker c...   1134                 [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable ...   452                  [OK]
...
...

拉取官方鏡像,其中上面的非官方鏡像是使用者根據自己的需求製作的鏡像,方便大家的使用。

# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
afeb2bfd31c0: Pull complete
7ff5d10493db: Downloading [===============>                                   ] 6.651 MB/21.87 MB
d2562f1ae1d0: Download complete

在這裡順便說一下,docker 映像像是分層儲存的,所以上面的 nginx 映像有 3 層,另外每根據新的容器製作一個新的映像檔以後會給這個映像加上一層。
接下來直接利用這個映像啟動一個新的容器:

# docker run --name my-nginx -d -p 8080:80 nginx

此時中瀏覽器中輸入:http://localhost:8080/ 即可存取 nginx。參數解釋:

  • --name 為容器取一個名字
  • -p 參數語法為-p host port:container port; -p 8080:80 將主機上的8080端口綁定到容器上的80端口,因此在主機中訪問8080端口時其實就是訪問nginx 容器的80端口
  • -d 後台運行容器

然後我們來看一個更複雜的例子:

# docker run --name my-nginx \ 
    -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro \
    -v /some/html:/usr/share/nginx/html:ro \
    -p 8080:80 \
    -d nginx

這個例子多了一個參數 -v,這個參數的作用是把本地的檔案或資料夾掛載到容器中,其中最後面的 ro 或 rw 控制這個掛載是否可寫。

  • -v 參數語法為 -v host dir:container dir[:ro|rw]

上面的命令將本機檔案中的 nginx.conf 設定檔掛載到容器,並且將要展示的靜態頁面也掛載到容器。注意:在容器執行一條指令以後,當這個指令結束執行,容器也會結束執行。

接下來讓我們來看看 docker 別的指令。

查看所有運行中的容器:

# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1fe91b5a4cd4        nginx               "nginx -g 'daemon ..."   39 minutes ago      Up 39 minutes       0.0.0.0:8080->80/tcp   my-nginx
# docker ps -a ### 列出包括未运行的容器

查看容器運行日誌:

# docker logs my-nginx
172.17.0.1 - - [05/Oct/2017:07:31:11 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" "-"
2017/10/05 07:31:11 [error] 7#7: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost:8080"

重啟容器:

# docker restart my-nginx
my-nginx

停止運作一個容器:

# docker stop my-nginx
my-nginx
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

啟動一個已經存在的容器:

# docker start my-nginx
my-nginx
# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1fe91b5a4cd4        nginx               "nginx -g 'daemon ..."   50 minutes ago      Up 3 seconds        0.0.0.0:8080->80/tcp   my-nginx

直接殺死一個運作中的容器:

# docker kill my-nginx

重新命名容器:

# docker rename my-nginx new-nginx

刪除容器:

# docker rm new-nginx

查看本機所有映像:

# docker imags

使用已經存在的容器建立一個映像:

# docker commit -m "nothing changed" my-nginx my-nginx-image
sha256:f02483cdb842a0dc1730fe2c653603fa3271e71c31dbb442caccd7ad64860350
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-nginx-image      latest              f02483cdb842        6 seconds ago       108 MB
nginx               latest              da5939581ac8        3 weeks ago         108 MB

使用我們自己建立的映像建立容器:

# docker run --name test -d -p 8081:80 my-nginx-image
12ba86eabdef0121d875bdb547f1101d4eb54ff7cb36e20214fb1388659af83d
# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
12ba86eabdef        my-nginx-image      "nginx -g 'daemon ..."   7 seconds ago       Up 5 seconds        0.0.0.0:8081->80/tcp   test
299f4ede9e79        nginx               "nginx -g 'daemon ..."   11 minutes ago      Up 11 minutes       0.0.0.0:8080->80/tcp   my-nginx

如果我們使用的容器的啟動指令是一個 shell ,那麼我們可以使用 attach 指令來介入這個容器,就跟我們使用 ssh 連線一台伺服器差不多。

# docker attach some-container

在建立容器時直接啟動一個可互動的 shell,並且退出後自動刪除容器:

# docker run -it --rm  centos
總結

本文介紹了 docker 的簡單用法,同時也給了一個實際的範例用來展示 docker 指令的各種操作。作為一個快速入門的文章,本文寫的相對有點簡單,很多概念上的東西還需要求查看別的資料理解,但是看完本文應該就具備使用 docker 的基本能力了。此外,後續的文章應該會寫一點 Dockerfile 與 docker-compose 相關的內容。

以上是Docker快速入門五分鐘的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:linuxprobe.com。如有侵權,請聯絡admin@php.cn刪除