您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Docker入門(mén)詳細(xì)介紹”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Docker入門(mén)詳細(xì)介紹”吧!
一、為什么選擇 Docker
傳統(tǒng)虛擬機(jī)的缺點(diǎn):資源占用十分多、冗余步驟多、啟動(dòng)很慢。
Docker 的優(yōu)勢(shì):使用容器化技術(shù),項(xiàng)目代碼帶上環(huán)境配置打包成鏡像,上傳到鏡像倉(cāng)庫(kù),別人下載鏡像即可運(yùn)行,不再需要復(fù)雜的環(huán)境配置。
「注意:容器化技術(shù)不是模擬一個(gè)完整的操作系統(tǒng)」。所以 Docker 之所以能火,是因?yàn)樗绕胀ㄌ摂M機(jī)輕巧!
Docker 和虛擬機(jī)技術(shù)的不同:
傳統(tǒng)虛擬機(jī),虛擬出一條硬件,運(yùn)行一個(gè)完整的操作系統(tǒng),然后在這個(gè)系統(tǒng)上安裝和運(yùn)行軟件;
Docker 容器內(nèi)的應(yīng)用直接運(yùn)行在宿主機(jī)的內(nèi)容,容器是沒(méi)有自己的內(nèi)核的,也沒(méi)有虛擬我們的硬件,所以就輕便了;
每個(gè)容器間是互相隔離,每個(gè)容器內(nèi)都有一個(gè)屬于自己的文件系統(tǒng),互不影響。
二、Docker 中的幾個(gè)術(shù)語(yǔ)
Docker的相關(guān)術(shù)語(yǔ):
鏡像 (image)
容器 (container)
倉(cāng)庫(kù) (repository)
鏡像可以認(rèn)為是一些軟件和配置環(huán)境的整體打包。
容器可以認(rèn)為是一個(gè)精簡(jiǎn)的 Linux 系統(tǒng),它是通過(guò)鏡像運(yùn)行起來(lái)的實(shí)例,鏡像運(yùn)行起來(lái)就是容器。從這個(gè)角度來(lái)講,鏡像就類(lèi)似于 Java 中的 Class 類(lèi)型,由它可以創(chuàng)建多個(gè)實(shí)例。
鏡像是存在硬盤(pán)上的東西,鏡像運(yùn)行起來(lái),就形成一個(gè)容器,容器才是真正跑起來(lái)的程序。只不過(guò)在 Docker 中,我們可以進(jìn)入容器,做一些操作,然后再把容器中的改動(dòng)提交形成一個(gè)新的鏡像。
倉(cāng)庫(kù)類(lèi)似于 Github,我們寫(xiě)好的代碼會(huì)提交到 Github 上面進(jìn)行保存和管理,方便在其他地方也能下載代碼。鏡像倉(cāng)庫(kù)也是類(lèi)似的,制作好的鏡像,就把它放到鏡像倉(cāng)庫(kù),方便其他人直接用鏡像部署。
三、Docker 安裝與卸載
環(huán)境準(zhǔn)備,Linux 要求內(nèi)核 3.0 以上,我這里使用的阿里云服務(wù)器(CentOS 8),查看相關(guān)信息的命令如下:
? ~ 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 的安裝參照其官方文檔按照步驟來(lái)就完全可以(Docker 的官方文檔相當(dāng)?shù)脑敿?xì)),網(wǎng)址:https://docs.docker.com/engine/install/
這里為了方便為大家把安裝步驟以及相應(yīng)的注釋寫(xiě)出來(lái):
1、卸載舊版本,如果服務(wù)器上沒(méi)安裝過(guò) docker 就不用進(jìn)行此步驟。
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、設(shè)置鏡像的倉(cāng)庫(kù),官方文檔中默認(rèn)是國(guó)外的倉(cāng)庫(kù),不推薦使用,這里推薦使用國(guó)內(nèi)的,如下:
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 代表為社區(qū)版,而 ee 代表是企業(yè)版,此處安裝社區(qū)版。
yum install docker-ce docker-ce-cli containerd.io
注意:版本為 centos 8 時(shí)執(zhí)行上述命令時(shí)會(huì)報(bào)錯(cuò),說(shuō)的是 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
然后重新執(zhí)行:
yum install docker-ce docker-ce-cli containerd.io
5、啟動(dòng) 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 的版本信息則說(shuō)明 docker 安裝成功。
7、配置阿里云。
把上述的代碼直接一步一步執(zhí)行即可。
8、測(cè)試運(yùn)行 hello-world。
第一次運(yùn)行會(huì)自動(dòng)從鏡像倉(cāng)庫(kù)中拉取最新鏡像,然后再運(yùn)行鏡像。
docker run hello-world
等待出現(xiàn)以下內(nèi)容,說(shuō)明 hello-world 鏡像拉取并運(yùn)行成功。
Hello from Docker! This message shows that your installation appears to be working correctly. ...
Docker 中 run 命令運(yùn)行的原理:
run命令運(yùn)行原理
9、查看當(dāng)前 Docker 中下載的鏡像信息。
? ~ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1ae65 4 months ago 13.3kB
卸載 Docker(除非不用,否則干嘛要卸載呢):
#1. 卸載依賴(lài)yum remove docker-ce docker-ce-cli containerd.io#2. 刪除資源rm -rf /var/lib/docker # /var/lib/docker 是 docker 的默認(rèn)工作路徑!
Docker 常用命令
Docker 中的命令有很多,也不可能全部記完,還是像學(xué)習(xí) Linux 命令一樣,只要多練習(xí)實(shí)踐,就能夠快速掌握。另外,只要 Linux 玩得好,那么 Docker 這一塊怎么玩都不會(huì)錯(cuò)。
Docker 命令官方文檔:https://docs.docker.com/reference/,這里整理一下常用的命令。
docker version # 顯示docker的版本信息 docker info # 顯示docker的系統(tǒng)信息,包括鏡像和容器的數(shù)量 docker --help # 幫助命令
docker images #查看所有本地主機(jī)上的鏡像 可以使用docker image ls代替 docker search #搜索鏡像 docker pull #下載鏡像 docker rmi #刪除鏡像
下面對(duì)這幾個(gè)命令詳細(xì)說(shuō)明一下。
「docker images
查看所有本地的主機(jī)上的鏡像」
? ~ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 e73346bdf465 24 hours ago 448MB
解釋?zhuān)?/p>
REPOSITORY # 鏡像的倉(cāng)庫(kù)源 TAG # 鏡像的標(biāo)簽 IMAGE ID # 鏡像的id CREATED # 鏡像的創(chuàng)建時(shí)間 SIZE # 鏡像的大小
docker images 命令的可選項(xiàng):
Options: -a, --all Show all images (default hides intermediate images) #列出所有鏡像 -q, --quiet Only show numeric IDs # 只顯示鏡像的id
例如:
? ~ docker images -aq # 顯示所有鏡像的id e73346bdf465
「docker search
搜索鏡像」
通常我們會(huì)在 DockerHub 官網(wǎng)中進(jìn)行搜索相應(yīng)的鏡像,如下:
官網(wǎng)搜索鏡像
但是我們也可以在 Docker 命令行中進(jìn)行鏡像搜索,例如:
[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 命令后也可以加可選項(xiàng):
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
例如我們對(duì)搜索的結(jié)果進(jìn)行一定的過(guò)濾:
# --filter=STARS=5000 表示搜索出來(lái)的鏡像就是 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 # 如果不寫(xiě)tag,默認(rèn)就是latest 8: Pulling from library/tomcat 90fe46dd8199: Already exists #分層下載:docker image 的核心 聯(lián)合文件系統(tǒng) 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 #真實(shí)地址#指定版本下載 MySQL,如? ~ docker pull mysql:5.7
「docker rmi
刪除鏡像」
? ~ docker rmi -f 鏡像id # 刪除指定的鏡像 ? ~ docker rmi -f 鏡像id 鏡像id 鏡像id 鏡像id # 刪除指定的多個(gè)鏡像 ? ~ docker rmi -f $(docker images -aq) # 刪除全部的鏡像 $()為傳入?yún)?shù)
容器就是運(yùn)行起來(lái)的鏡像。
docker pull 名稱(chēng)[:tag] # 拉取鏡像,有了鏡像才可以創(chuàng)建出容器 docker run 鏡像 # 新建容器并啟動(dòng),此時(shí)會(huì)新鍵容器 docker ps # 列出所有運(yùn)行的容器 docker ps -a # 列出所有的容器(包含歷史) docker rm 容器id # 刪除指定id的容器,注意和 rmi 的區(qū)別 docker start 容器id # 啟動(dòng)容器,根據(jù)容器 id 來(lái)運(yùn)行,此時(shí)不會(huì)新鍵容器 docker restart 容器id # 重啟容器 docker stop 容器id # 停止當(dāng)前正在運(yùn)行的容器 docker kill 容器id # 強(qiáng)制停止當(dāng)前容器
「運(yùn)行容器」
使用命令 docker run 鏡像
命令來(lái)運(yùn)行容器,此命令的可選項(xiàng)有:
--name="Name" # 容器名字 tomcat01 tomcat02 用來(lái)區(qū)分容器 -d # 后臺(tái)方式運(yùn)行 -it # 使用交互方式運(yùn)行,進(jìn)入容器查看內(nèi)容 -p # 指定容器的端口 -p 8080(宿主機(jī)):8080(容器) -P(大寫(xiě)) #隨機(jī)指定端口
例如這里寫(xiě)個(gè)測(cè)試,啟動(dòng) msyql 鏡像并進(jìn)入容器,使用 bash:
[root@eric ~]# docker run -it mysql /bin/bash# 注意此時(shí)已經(jīng)進(jìn)入容器內(nèi)部,觀察主機(jī)名稱(chēng)的改變r(jià)oot@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# 進(jìn)入 MySQL 數(shù)據(jù)庫(kù)中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.# 此時(shí)進(jìn)入我們 Docker 中的數(shù)據(jù)庫(kù),和本地操作是一模一樣的mysql> show databases;+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)# 退出數(shù)據(jù)庫(kù)mysql> exitBye# 退出 mysql 容器root@6849133331da:/# exit exit# 查看運(yùn)行的容器[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# 停止運(yùn)行容器[root@eric ~]# docker stop 6849133331da docker6849133331da [root@eric ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@eric ~]#
有的容器退出后就會(huì)自動(dòng)停止運(yùn)行,如 centos,如果想容器不停止退出,則可以使用按鍵:ctrl + P + Q
。
對(duì)于上述在容器中運(yùn)行的數(shù)據(jù)庫(kù),如果我們想要在外部連接使用,那該怎么辦呢?很簡(jiǎn)單,只要我們把其端口映射出來(lái)就可以了,在我們運(yùn)行數(shù)據(jù)庫(kù)時(shí),可以這樣使用命令:docker run -d -p 3306:3306 mysql
,它就表示后臺(tái)運(yùn)行 MySQL 數(shù)據(jù)庫(kù),并把其端口映射到服務(wù)器中,然后我們開(kāi)啟服務(wù)器防火墻相對(duì)應(yīng)的 3306 端口以及阿里云安全組 3306 端口后,就可以使用公網(wǎng)地址和端口號(hào)連接我們 Docker 容器中的數(shù)據(jù)庫(kù)了。例如我的:
連接Docker數(shù)據(jù)庫(kù)
「列舉容器」
docker ps # 列舉當(dāng)前正在運(yùn)行的容器 docker ps -a # 列舉所有運(yùn)行過(guò)的容器
「退出容器」
exit # 容器停止并退出 ctrl + P + Q # 容器不停止退出
「刪除容器」
docker rm 容器id # 刪除指定的容器,不能刪除正在運(yùn)行的容器,如果要強(qiáng)制刪除 rm -rf docker rm -f 容器id 或 $(docker ps -aq) # 刪除指定的容器或全部刪除(包括歷史信息) docker ps -a -q|xargs docker rm # 刪除所有的容器
「啟動(dòng)和停止容器的操作」
docker start 容器id #啟動(dòng)容器 docker restart 容器id #重啟容器 docker stop 容器id #停止當(dāng)前正在運(yùn)行的容器 docker kill 容器id #強(qiáng)制停止當(dāng)前容器
「后臺(tái)啟動(dòng)命令」
有時(shí)候我們想要容器在后臺(tái)啟動(dòng),例如我們想要在后臺(tái)運(yùn)行一個(gè) centos 容器,那這個(gè)時(shí)候就用到了如下命令:
# 命令 docker run -d 鏡像名? ~ docker run -d centos a8f922c255859622ac45ce3a535b7a0e8253329be4756ed6e32265d2dd2fac6c
此時(shí)我們來(lái)查看正在運(yùn)行的容器:
? ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
發(fā)現(xiàn)并沒(méi)有容器正在運(yùn)行,centos 停止了。這是一個(gè)常見(jiàn)的坑,docker 容器使用后臺(tái)運(yùn)行,就必須要有一個(gè)前臺(tái)進(jìn)程,docker 發(fā)現(xiàn)沒(méi)有應(yīng)用,就會(huì)自動(dòng)停止。比如 docker 中安裝了 nginx,容器啟動(dòng)后,發(fā)現(xiàn)自己沒(méi)有提供服務(wù),就會(huì)立刻停止,就是沒(méi)有程序了。
「查看日志」
使用 docker logs
命令,可選項(xiàng)有:
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 # 跟著日志
「查看容器中進(jìn)程信息」
docker top 容器id
「查看鏡像的元數(shù)據(jù)」
比較重要的命令,可以查看容器的詳細(xì)信息。
docker inspect 容器id
「進(jìn)入當(dāng)前正在運(yùn)行的容器」
我們通常都是使用后臺(tái)方式運(yùn)行容器的,但是有些時(shí)候需要進(jìn)入容器,修改一些配置,進(jìn)入容器的方式有兩種:
# 方式1:docker exec -it 容器id bashshell# 方式2:docker attach 容器id
兩種方式的區(qū)別:
docker exec # 進(jìn)入當(dāng)前容器后開(kāi)啟一個(gè)新的終端,可以在里面操作。(常用) docker attach # 進(jìn)入容器正在執(zhí)行的終端
測(cè)試:
? ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS 55321bcae33d centos "/bin/sh -c 'while t…" 10 minutes ago Up 10 minutes# 測(cè)試 exec 方式進(jìn)入在后臺(tái)運(yùn)行的容器,使用 bash 進(jìn)行交互? ~ docker exec -it 55321bcae33d /bin/bash [root@55321bcae33d /]# # 測(cè)試 attach 方式? ~ docker attach 55321bcae33d 當(dāng)前正在的代碼...
「拷貝容器內(nèi)文件到宿主機(jī)」
拷貝命令:
docker cp 容器id:容器內(nèi)路徑 宿主機(jī)目的路徑
測(cè)試:
#進(jìn)入docker容器內(nèi)部? ~ 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#新建一個(gè)文件[root@55321bcae33d /]# echo "hello" > test.java [root@55321bcae33d /]# cat test.java hello [root@55321bcae33d /]# exit exit ? ~ docker cp 55321bcae33d:/test.java / #拷貝到宿主機(jī) / 目錄下 ? ~ cd / ? / ls # 可以看見(jiàn) test.java 確實(shí)存在 bin home lib mnt run sys ... etc test.java media root swapfile var
總結(jié)
本文為 Docker 的入門(mén)文章,從為什么選擇 Docker 也即 Docker 的優(yōu)勢(shì)說(shuō)起,然后描述了 Docker 中的幾個(gè)相關(guān)術(shù)語(yǔ)——鏡像、容器、鏡像倉(cāng)庫(kù)。緊接著就向大家介紹了 Docker 的安裝與卸載,最后比較重要的是掌握 Docker 中常用的一些命令。
到此,相信大家對(duì)“Docker入門(mén)詳細(xì)介紹”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。