中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker入門詳細介紹

發布時間:2021-06-28 15:39:13 來源:億速云 閱讀:157 作者:chen 欄目:編程語言

本篇內容主要講解“Docker入門詳細介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Docker入門詳細介紹”吧!

一、為什么選擇 Docker

傳統虛擬機的缺點:資源占用十分多、冗余步驟多、啟動很慢。

Docker 的優勢:使用容器化技術,項目代碼帶上環境配置打包成鏡像,上傳到鏡像倉庫,別人下載鏡像即可運行,不再需要復雜的環境配置。

「注意:容器化技術不是模擬一個完整的操作系統」。所以 Docker 之所以能火,是因為它比普通虛擬機輕巧!

Docker 和虛擬機技術的不同:

  • 傳統虛擬機,虛擬出一條硬件,運行一個完整的操作系統,然后在這個系統上安裝和運行軟件;

  • Docker 容器內的應用直接運行在宿主機的內容,容器是沒有自己的內核的,也沒有虛擬我們的硬件,所以就輕便了;

  • 每個容器間是互相隔離,每個容器內都有一個屬于自己的文件系統,互不影響。

二、Docker 中的幾個術語

Docker的相關術語:

  • 鏡像 (image)

  • 容器 (container)

  • 倉庫 (repository)

鏡像可以認為是一些軟件和配置環境的整體打包。

容器可以認為是一個精簡的 Linux 系統,它是通過鏡像運行起來的實例,鏡像運行起來就是容器。從這個角度來講,鏡像就類似于 Java 中的 Class 類型,由它可以創建多個實例。

鏡像是存在硬盤上的東西,鏡像運行起來,就形成一個容器,容器才是真正跑起來的程序。只不過在 Docker 中,我們可以進入容器,做一些操作,然后再把容器中的改動提交形成一個新的鏡像。

倉庫類似于 Github,我們寫好的代碼會提交到 Github 上面進行保存和管理,方便在其他地方也能下載代碼。鏡像倉庫也是類似的,制作好的鏡像,就把它放到鏡像倉庫,方便其他人直接用鏡像部署。

三、Docker 安裝與卸載

環境準備,Linux 要求內核 3.0 以上,我這里使用的阿里云服務器(CentOS 8),查看相關信息的命令如下:

?  ~ uname -r    
4.18.0-193.14.2.el8_2.x86_64   # 要求 3.0 以上
?  ~ cat /etc/os-release 
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"

Docker 的安裝參照其官方文檔按照步驟來就完全可以(Docker 的官方文檔相當的詳細),網址:https://docs.docker.com/engine/install/

這里為了方便為大家把安裝步驟以及相應的注釋寫出來:

1、卸載舊版本,如果服務器上沒安裝過 docker 就不用進行此步驟。

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、需要的安裝包:

yum install -y yum-utils

3、設置鏡像的倉庫,官方文檔中默認是國外的倉庫,不推薦使用,這里推薦使用國內的,如下:

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 軟件包索引:

yum makecache fast # 注意:如果是 centos 8 版本則直接使用 yum makecache 即可

4、安裝 docker ,docker-ce 代表為社區版,而 ee 代表是企業版,此處安裝社區版。

yum install docker-ce docker-ce-cli containerd.io

注意:版本為 centos 8 時執行上述命令時會報錯,說的是 containerd.io >= 1.2.2-3,解決方法:

(1)降低 docker 的版本;(2)如果不想降低 docker 版本,那么就更新 containerd.io 的版本:

wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum install -y  containerd.io-1.2.6-3.3.el7.x86_64.rpm

然后重新執行:

yum install docker-ce docker-ce-cli containerd.io

5、啟動 docker。

systemctl start docker

6、查看是否安裝成功。

[root@eric ~]# docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false
 ...

顯示 docker 的版本信息則說明 docker 安裝成功。

7、配置阿里云。

Docker入門詳細介紹

把上述的代碼直接一步一步執行即可。

8、測試運行 hello-world。

第一次運行會自動從鏡像倉庫中拉取最新鏡像,然后再運行鏡像。

docker run hello-world

等待出現以下內容,說明 hello-world 鏡像拉取并運行成功。

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Docker 中 run 命令運行的原理:

Docker入門詳細介紹

run命令運行原理

9、查看當前 Docker 中下載的鏡像信息。

?  ~ docker images         
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
hello-world           latest              bf756fb1ae65        4 months ago        13.3kB

卸載 Docker(除非不用,否則干嘛要卸載呢):

#1. 卸載依賴yum remove docker-ce docker-ce-cli containerd.io#2. 刪除資源rm -rf /var/lib/docker # /var/lib/docker 是 docker 的默認工作路徑!

Docker 常用命令

Docker 中的命令有很多,也不可能全部記完,還是像學習 Linux 命令一樣,只要多練習實踐,就能夠快速掌握。另外,只要 Linux 玩得好,那么 Docker 這一塊怎么玩都不會錯。

Docker 命令官方文檔:https://docs.docker.com/reference/,這里整理一下常用的命令。

幫助命令

docker version   # 顯示docker的版本信息

docker info      # 顯示docker的系統信息,包括鏡像和容器的數量

docker --help    # 幫助命令

鏡像命令

docker images   #查看所有本地主機上的鏡像 可以使用docker image ls代替

docker search   #搜索鏡像

docker pull     #下載鏡像

docker rmi      #刪除鏡像

下面對這幾個命令詳細說明一下。

docker images 查看所有本地的主機上的鏡像」

?  ~ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
mysql                 5.7                 e73346bdf465        24 hours ago        448MB

解釋:

REPOSITORY  # 鏡像的倉庫源
TAG         # 鏡像的標簽
IMAGE ID    # 鏡像的id
CREATED     # 鏡像的創建時間
SIZE        # 鏡像的大小

docker images 命令的可選項:

Options:
  -a, --all             Show all images (default hides intermediate images)  #列出所有鏡像
  -q, --quiet           Only show numeric IDs  # 只顯示鏡像的id

例如:

?  ~ docker images -aq  # 顯示所有鏡像的id
e73346bdf465

docker search 搜索鏡像」

通常我們會在 DockerHub 官網中進行搜索相應的鏡像,如下:

Docker入門詳細介紹

官網搜索鏡像

但是我們也可以在 Docker 命令行中進行鏡像搜索,例如:

[root@eric ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation??  10202               [OK]                
mariadb                           MariaDB is a community-developed fork of MyS??  3753                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create??  746                                     [OK]
percona                           Percona Server is a fork of the MySQL relati??  511                 [OK]

docker search 命令后也可以加可選項:

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output

例如我們對搜索的結果進行一定的過濾:

# --filter=STARS=5000 表示搜索出來的鏡像就是 STARS 大于 5000 的      ?  ~ docker search mysql --filter=STARS=5000
NAME                DESCRIPTION                                     STARS               OFFICIAL  
mysql               MySQL is a widely used, open-source relation…   9500                [OK]

docker pull 下載鏡像」

下載鏡像:docker pull 鏡像名[:tag],例如我們下載 tomcat 8,命令如下:

?  ~ docker pull tomcat:8     # 如果不寫tag,默認就是latest
8: Pulling from library/tomcat
90fe46dd8199: Already exists   #分層下載:docker image 的核心 聯合文件系統
35a4f1977689: Already exists 
bbc37f14aded: Already exists 
74e27dc593d4: Already exists 
93a01fbfad7f: Already exists 
1478df405869: Pull complete 
64f0dd11682b: Pull complete 
68ff4e050d11: Pull complete 
f576086003cf: Pull complete 
3b72593ce10e: Pull complete 
Digest: sha256:0c6234e7ec9d10ab32c06423ab829b32e3183ba5bf2620ee66de866df640a027  # 簽名 防偽
Status: Downloaded newer image for tomcat:8
docker.io/library/tomcat:8 #真實地址#指定版本下載 MySQL,如?  ~ docker pull mysql:5.7

docker rmi 刪除鏡像」

?  ~ docker rmi -f 鏡像id                      # 刪除指定的鏡像
?  ~ docker rmi -f 鏡像id 鏡像id 鏡像id 鏡像id  # 刪除指定的多個鏡像
?  ~ docker rmi -f $(docker images -aq)        # 刪除全部的鏡像 $()為傳入參數

容器命令

容器就是運行起來的鏡像。

docker pull 名稱[:tag] # 拉取鏡像,有了鏡像才可以創建出容器

docker run 鏡像        # 新建容器并啟動,此時會新鍵容器

docker ps              # 列出所有運行的容器
docker ps -a           # 列出所有的容器(包含歷史)

docker rm 容器id        # 刪除指定id的容器,注意和 rmi 的區別

docker start 容器id     # 啟動容器,根據容器 id 來運行,此時不會新鍵容器
docker restart 容器id   # 重啟容器
docker stop 容器id      # 停止當前正在運行的容器
docker kill 容器id      # 強制停止當前容器

「運行容器」

使用命令 docker run 鏡像 命令來運行容器,此命令的可選項有:

--name="Name" # 容器名字 tomcat01 tomcat02 用來區分容器
-d    # 后臺方式運行
-it    # 使用交互方式運行,進入容器查看內容
-p            # 指定容器的端口 -p 8080(宿主機):8080(容器)
-P(大寫)      #隨機指定端口

例如這里寫個測試,啟動 msyql 鏡像并進入容器,使用 bash:

[root@eric ~]# docker run -it mysql /bin/bash# 注意此時已經進入容器內部,觀察主機名稱的改變root@6849133331da:/# ls
bin  boot  dev docker-entrypoint-initdb.d  entrypoint.sh  etc home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var# 進入 MySQL 數據庫中root@6849133331da:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.32 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.# 此時進入我們 Docker 中的數據庫,和本地操作是一模一樣的mysql> show databases;+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)# 退出數據庫mysql> exitBye# 退出 mysql 容器root@6849133331da:/# exit
exit# 查看運行的容器[root@eric ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
6849133331da        mysql:5.7           "docker-entrypoint.s??   11 days ago         Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql01# 停止運行容器[root@eric ~]# docker stop 6849133331da
docker6849133331da
[root@eric ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@eric ~]#

有的容器退出后就會自動停止運行,如 centos,如果想容器不停止退出,則可以使用按鍵:ctrl + P + Q 。

對于上述在容器中運行的數據庫,如果我們想要在外部連接使用,那該怎么辦呢?很簡單,只要我們把其端口映射出來就可以了,在我們運行數據庫時,可以這樣使用命令:docker run -d -p 3306:3306 mysql,它就表示后臺運行 MySQL 數據庫,并把其端口映射到服務器中,然后我們開啟服務器防火墻相對應的 3306 端口以及阿里云安全組 3306 端口后,就可以使用公網地址和端口號連接我們 Docker 容器中的數據庫了。例如我的:

Docker入門詳細介紹

連接Docker數據庫

「列舉容器」

docker ps    # 列舉當前正在運行的容器

docker ps -a # 列舉所有運行過的容器

「退出容器」

exit          # 容器停止并退出
ctrl + P + Q  # 容器不停止退出

「刪除容器」

docker rm 容器id    # 刪除指定的容器,不能刪除正在運行的容器,如果要強制刪除 rm -rf
docker rm -f 容器id 或 $(docker ps -aq)  # 刪除指定的容器或全部刪除(包括歷史信息)
docker ps -a -q|xargs docker rm         # 刪除所有的容器

「啟動和停止容器的操作」

docker start 容器id #啟動容器
docker restart 容器id #重啟容器
docker stop 容器id #停止當前正在運行的容器
docker kill 容器id #強制停止當前容器

其他命令

「后臺啟動命令」

有時候我們想要容器在后臺啟動,例如我們想要在后臺運行一個 centos 容器,那這個時候就用到了如下命令:

# 命令 docker run -d 鏡像名?  ~ docker run -d centos
a8f922c255859622ac45ce3a535b7a0e8253329be4756ed6e32265d2dd2fac6c

此時我們來查看正在運行的容器:

?  ~ docker ps           
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

發現并沒有容器正在運行,centos 停止了。這是一個常見的坑,docker 容器使用后臺運行,就必須要有一個前臺進程,docker 發現沒有應用,就會自動停止。比如 docker 中安裝了 nginx,容器啟動后,發現自己沒有提供服務,就會立刻停止,就是沒有程序了。

「查看日志」

使用 docker logs 命令,可選項有:

docker logs --help
Options:
      --details        Show extra details provided to logs 
*  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
*      --tail string    Number of lines to show from the end of the logs (default "all")
*  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)

顯示日志:

docker logs -t --tail n 容器id  # 查看 n 行日志
docker logs -ft 容器id          # 跟著日志

「查看容器中進程信息」

docker top 容器id

「查看鏡像的元數據」

比較重要的命令,可以查看容器的詳細信息。

docker inspect 容器id

「進入當前正在運行的容器」

我們通常都是使用后臺方式運行容器的,但是有些時候需要進入容器,修改一些配置,進入容器的方式有兩種:

# 方式1:docker exec -it 容器id bashshell# 方式2:docker attach 容器id

兩種方式的區別:

docker exec   # 進入當前容器后開啟一個新的終端,可以在里面操作。(常用)
docker attach # 進入容器正在執行的終端

測試:

?  ~ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS      
55321bcae33d        centos              "/bin/sh -c 'while t…"   10 minutes ago      Up 10 minutes# 測試 exec 方式進入在后臺運行的容器,使用 bash 進行交互?  ~ docker exec -it 55321bcae33d /bin/bash
[root@55321bcae33d /]# # 測試 attach 方式?  ~ docker attach 55321bcae33d 
當前正在的代碼...

「拷貝容器內文件到宿主機」

拷貝命令:

docker cp 容器id:容器內路徑  宿主機目的路徑

測試:

#進入docker容器內部?  ~ docker exec -it  55321bcae33d /bin/bash 
[root@55321bcae33d /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr#新建一個文件[root@55321bcae33d /]# echo "hello" > test.java
[root@55321bcae33d /]# cat test.java 
hello
[root@55321bcae33d /]# exit
exit
?  ~ docker cp 55321bcae33d:/test.java /    #拷貝到宿主機 / 目錄下
?  ~ cd /              
?  / ls   # 可以看見 test.java 確實存在
bin   home         lib     mnt   run      sys  
...
etc   test.java    media   root  swapfile  var

總結

本文為 Docker 的入門文章,從為什么選擇 Docker 也即 Docker 的優勢說起,然后描述了 Docker 中的幾個相關術語——鏡像、容器、鏡像倉庫。緊接著就向大家介紹了 Docker 的安裝與卸載,最后比較重要的是掌握 Docker 中常用的一些命令。

到此,相信大家對“Docker入門詳細介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

将乐县| 长治县| 博客| 正安县| 上林县| 泗水县| 南康市| 深水埗区| 西平县| 大名县| 海南省| 蓝田县| 贵南县| 疏勒县| 嘉兴市| 永仁县| 拜城县| 深州市| 宁晋县| 丹东市| 新巴尔虎左旗| 万年县| 上蔡县| 陆丰市| 田东县| 廉江市| 仙桃市| 九台市| 翁源县| 余庆县| 怀远县| 固原市| 湖北省| 乌审旗| 宜宾县| 龙井市| 巨鹿县| 霍山县| 东乡族自治县| 高台县| 军事|