您好,登錄后才能下訂單哦!
本篇內容主要講解“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、配置阿里云。
把上述的代碼直接一步一步執行即可。
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 命令運行的原理:
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 命令行中進行鏡像搜索,例如:
[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 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入門詳細介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。