溫馨提示×

溫馨提示×

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

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

怎么安裝配置Docker

發(fā)布時間:2021-10-27 11:40:44 來源:億速云 閱讀:138 作者:iii 欄目:web開發(fā)

本篇內(nèi)容主要講解“怎么安裝配置Docker”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么安裝配置Docker”吧!

1. 介紹

1.1 出現(xiàn)的原因

前后端開發(fā)到測試到生產(chǎn)的過程中,經(jīng)常會遇到一個問題,明明我在本地跑沒問題,為什么到測試環(huán)境或者生產(chǎn)環(huán)境就報錯了了呢,常常這是因為開發(fā)、測試、生產(chǎn)的環(huán)境與配置不同導(dǎo)致的。

折騰過環(huán)境配置的人都明白其中麻煩,換一臺系統(tǒng)、虛擬機、機器,就又要重來一次,費力費時。由于環(huán)境和配置的原因,各種奇奇怪怪因為環(huán)境和配置的  Bug,總是像打地鼠游戲里面的地鼠一樣不斷冒出來 ??

怎么安裝配置Docker

Docker

Docker  對這個問題給出了一個很好的解決方案,通過鏡像將除了系統(tǒng)之外所需要的系統(tǒng)環(huán)境由下而上打包,達到服務(wù)跨平臺的無縫運作。也就是說,安裝的時候,把特定的環(huán)境一模一樣地搬過來,從而解決「在我的電腦上能跑,在  xx 環(huán)境就跑不了」的情況。

另外一個重要的原因,就是輕量,基于容器的虛擬化,Docker 的鏡像僅包含業(yè)務(wù)運行所需的 runtime 環(huán)境,一個 CentOS/Ubuntu  基礎(chǔ)鏡像僅 170M,因為輕量一個宿主機可以輕松安裝數(shù)百個容器。

1.2 是什么

Docker 是基于 Go 語言實現(xiàn)的云開源項目,從 2013 年發(fā)布到現(xiàn)在一直廣受關(guān)注。Docker  可以讓你像使用集裝箱一樣快速的組合成應(yīng)用,并且可以像運輸標準集裝箱一樣,盡可能的屏蔽代碼層面的差異。它將應(yīng)用程序與該程序的依賴,打包在一個文件里面。運行這個文件,就會生成一個虛擬容器。

程序在這個虛擬容器里運行,就好像在真實的物理機上運行一樣。有了 Docker,就不用擔心環(huán)境問題。

本文就不對比虛擬機跟 Docker 的區(qū)別和優(yōu)劣了,每個文章都有,說爛了,想了解的話可以百度一下  ??,我這里就不多說了,下面直接看看怎么安裝怎么用起來吧。

2. 安裝 & 配置

2.1 Mac 下安裝

在下直接使用 Homebrew Cask 來安裝,Mac 下:

# Homebrew 安裝 $ braw cask install docke

即可,安裝完輸入命令,直接報錯!

?  ~ docke zsh: command not found: docker  # 報錯

遇到這個報錯別擔心,安裝完之后要在應(yīng)用列表里面雙擊 Docker 應(yīng)用,輸入密碼之后就可以使用這個命令了 ??。

2.2 CentOS 下安裝

Docker 要求 CentOS 版本必須在 6.5 及以上才可以安裝。

# 安裝 $ sudo yum install yum-utils device-mapper-persistent-data lvm2 $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo $ sudo yum install docker-ce  # 開啟 Docke $ sudo systemctl start docke

在 Windows 上可以直接下載安裝包來安裝,或者 Mac 上不使用 Homebrew  也可以去官網(wǎng)直接下載安裝包來安裝,百度一下到處都是安裝方法,其他的就不用多說。

3. 簡單配置并跑起來

3.1 配置鏡像加速

在 MacOS 的 Docker 配置 Perferences -> Docker Engine 或者 Windows 的 Settings  -> Deamon 中的 JSON 中增加一項 registry-mirrors 如下

怎么安裝配置Docker

Docker鏡像加速配置

配置完之后在命令行中 docker info 就可以查看到我們配置的鏡像加速地址了。

?  ~ sudo docker info ...  Registry Mirrors:   https://reg-mirror.qiniu.com/   http://hub-mirror.c.163.com/   https://registry.docker-cn.com/ ...

如果你的系統(tǒng)的 Docker 沒有客戶端,比如 CentOS 中,可以直接修改 deamon 配置文件:

# 修改/創(chuàng)建 docker 的 deamon 配置文件 $ sudo vi /etc/docker/daemon.json  # 修改為如下配置 {   "experimental": false,   "debug": true,   "registry-mirrors": [     "https://reg-mirror.qiniu.com",     "http://hub-mirror.c.163.com",     "https://registry.docker-cn.com"   ] }  # 修改完 :wq 重啟 $ sudo systemctl restart docke

3.2 Hello World !

然后就可以快樂跑起來我們第一個 Docker 指令 Hello World 了

怎么安裝配置Docker

Docker跑起Helloworld

Good start !

4. 鏡像 & 容器 & 倉庫

鏡像和容器的關(guān)系就像類和類的實例,一個鏡像可以同時跑多個容器,單個容器實例又可以創(chuàng)建新的鏡像。如下圖:

怎么安裝配置Docker

鏡像容器倉庫

下面解釋一下這個圖里面出現(xiàn)的元素

概念說明
Docker 鏡像 Images用于創(chuàng)建 Docker 容器的只讀模板,比如 Ubuntu 16.04系統(tǒng)、Nginx 1.16.0 等,是一個特殊的文件系統(tǒng),包括容器運行時需要的程序、庫、資源、參數(shù)等,但不包含任何動態(tài)數(shù)據(jù),內(nèi)容在構(gòu)建后也不會被改變,一個鏡像可以創(chuàng)建多個容器
Docker 容器 Container容器是獨立運行、相互隔離的一個或一組應(yīng)用,是鏡像創(chuàng)建的運行實例,實質(zhì)是進程,可以看作為一個簡易版的 Linux 環(huán)境 + 運行在其中的應(yīng)用程序
Docker 客戶端 Client客戶端通過命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 與 Docker 的守護進程通信
Docker 主機 Host一個物理或者虛擬的機器用于執(zhí)行 Docker 守護進程和容器
Docker 倉庫 Repository集中存放鏡像文件的地方,分為公有倉庫和私有倉庫。
Docker 注冊服務(wù)器 Registry是一個集中存儲、分發(fā)鏡像的服務(wù),官方的叫 Docker Hub。一個 Docker Registry 中可包含多個倉庫,每個倉庫可以包含多個標簽 Tag 的鏡像,不同的標簽對應(yīng)不同的版本
Docker MachineDocker Machine 是一個簡化 Docker 安裝的命令行工具,通過一個簡單的命令行即可在相應(yīng)的平臺上安裝Docker,比如 VirtualBox、 Digital Ocean、Microsoft Azure

容器的生命周期圖示

怎么安裝配置Docker

容器的生命周期

容器的五個核心狀態(tài),也就是圖中色塊表示的:Created、Running、Paused、Stopped、Deleted:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. Created:容器已經(jīng)被創(chuàng)建,容器所需的相關(guān)資源已經(jīng)準備就緒,但容器中的程序還未處于運行狀態(tài)。

  3. Running:容器正在運行,也就是容器中的應(yīng)用正在運行。

  4. Paused:容器已暫停,表示容器中的所有程序都處于暫停 ( 不是停止 ) 狀態(tài)。

  5. Stopped:容器處于停止狀態(tài),占用的資源和沙盒環(huán)境都依然存在,只是容器中的應(yīng)用程序均已停止。

  6. Deleted:容器已刪除,相關(guān)占用的資源及存儲在 Docker 中的管理信息也都已釋放和移除。

本文主要關(guān)注于使用,就不太贅述這些狀態(tài)的切換等,下面直接上手。

5. 基本使用

5.1 操作命令

# 開啟 Docker 開機自啟動 $ sudo systemctl enable docke  # 關(guān)閉 Docker 開機自啟動 $ sudo systemctl disable docke

5.2 鏡像命令

# 去下載鏡像,先從本地找,沒有去鏡像,最后沒有去 hub,標簽不寫默認為 lastest $ docker pull [鏡像名]:[標簽Tag]  # 列出本機的所有 image 文件,-a 顯示本地所有鏡像(包括中間鏡像),-q 只顯示鏡像ID,--digests 顯示鏡像的摘要信息 $ docker image ls $ docker images  # 刪除 image 文件, -f 強制刪除鏡像 $ docker rmi [鏡像名][:標簽Tag] $ docker rmi [鏡像名1][:標簽Tag] [鏡像名2][:標簽Tag]    # 刪多個 $ docker rmi $(docker ps -a -q)    # 刪全部,后面是子命令  # 查詢鏡像名稱,--no-trunc 顯示完整的鏡像描述,--filter=stars=30 列出star不少于指定值的鏡像,--filter=is-automated=true 列出自動構(gòu)建類型的鏡像 $ docker search [關(guān)鍵字]  # 下載鏡像,標簽 tag 不寫默認為 lastest,也可以自己加比如 :3.2.0 $ docker pull [鏡像名][:標簽Tag]

5.3 容器命令

# 列出本機正在運行的容器,-a 列出本機所有容器包括終止運行的容器,-q 靜默模式只顯示容器編號,-l 顯示最近創(chuàng)建的容器 $ docker container ls     # 等價于下面這個命令 $ docker ps  # 新建并啟動容器 $ docker run [option] [容器名]  # 啟動容器 $ docker start [容器ID]/[容器Names]  # 重啟容器 $ docker restart [容器ID]/[容器Names]  # 終止容器運行 $ docker kill [容器ID]  # 強行終止,相當于向容器里面的主進程發(fā)出 SIGKILL 信號,那些正在進行中的操作會全部丟失 $ docker kill $(docker ps -a -q) # 強行終止所有容器 $ docker stop [容器ID]  # 從容終止,相當于向容器里面的主進程發(fā)出 SIGTERM 信號,然后過一段時間再發(fā)出 SIGKILL 信號 $ docker stop $(docker ps -a -q) # 終止所有容器  # 終止運行的容器文件,依然會占據(jù)硬盤空間,可以使用 docker container rm 命令刪除,-f 強制刪除可以刪除正在運行的容器 $ docker rm [容器ID] $ docker rm `docker ps -aq`    # 刪除所有已經(jīng)停止的容器,因為沒停止的rm刪不了需要加-f  # 查看容器的輸出,-t加入時間戳,-f跟隨最新日志打印,--tail數(shù)字顯示最后多少條,如果docker run時,沒有使用-it,就要用這個命令查看輸出 $ docker logs [容器ID]  # 查看容器進程信息 $ docker top [容器ID]/[容器Names] $ docker port [容器ID]/[容器Names]  # 退出容器 $ exit           # 容器退出 ctrl + p + q     # 容器退出,快捷鍵  # 進入容器 $ docker attach [容器ID]      # 退出容器時會讓容器停止,本機的輸入直接輸?shù)饺萜髦?nbsp;$ docker exec -it [容器ID]    # 退出容器時不會讓容器停止,在已運行的容器中執(zhí)行命令,不創(chuàng)建和啟動新的容器  # 設(shè)置容器在docker啟動時自動啟動 $ docker container update --restart=always [容器名字]

這里要特別說一下 docker run 的 option,因為最常用:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. --name 為容器指定一個名稱;

  3. -d 容器啟動后進入后臺,并返回容器 ID,即啟動守護式容器;

  4. -P 隨機端口映射;

  5. -p 80:8080 將本地 80 端口映射到容器的 8080 端口;

  6. bash 容器啟動以后,內(nèi)部第一個執(zhí)行的命令。這里啟動 bash,保證用戶可以使用 Shell;

  7. -i 以交互模式運行容器,通常與 -t 同時使用;

  8. -t 為容器重新分配一個偽輸入終端,容器的 Shell 會映射到當前的 Shell,然后在本機窗口輸入的命令,就會傳入容器,通常與 -i  同時使用;

  9. --rm 在容器終止運行后自動刪除容器文件;

  10. --restart=always 設(shè)置容器自啟動;

  11. -v /xxx:/yyy 映射命令,把本機的 xxx 目錄映射到容器中的 yyy 目錄,也就是說改變本機的 xxx 目錄下的內(nèi)容, 容器 yyy  目錄中的內(nèi)容也會改變;

比如我在 CentOS 下跑起來一個 CentOS 的 Docker 容器:

# 下載 $ docker pull centos  # 在上面下載的 centos 鏡像基礎(chǔ)上,新建一個容器名為 mycentos0901 的 centos 實例,并進入這個容器的 bash $ docker run -it --name mycentos0901 0d120b6ccaa8  [root@169c9fffeecd /]   # 進入容器,下面輸入命令,注意這里 root 后面的一串 ID $ ls       # 可以看到centos的根目錄文件列表 $ docker   # bash: docker: command not found 這個容器沒有安裝docke

是不是很神奇,我們可以在一開始的 CentOS 下面執(zhí)行 docker ps 來查看容器列表:

怎么安裝配置Docker

image-20200901225909737

你會發(fā)現(xiàn)上面那個 ID,正是下面列表中跑起來的這個容器的 ID,鏡像的 ID 也是我們前面 pull 下來的 CentOS 鏡像 ID,名字也是我們起的  mycentos0901。

如果 docker run 之后報 Conflict. The container name "xxxx" is already in use by  container 就直接運行 docker rm $(docker ps -a -q) 刪除已停止的容器,或者精確刪除 docker rm  [containerID] 也可以,就可以了。

5.4 幾個常見場景的命令使用

守護式啟動容器

使用 centos 以后臺模式啟動一個容器 docker run -d --name mycentos0903 0d120b6ccaa8,啟動之后  docker ps -a 查看,發(fā)現(xiàn)容器并不在運行中,這是因為 Docker 的運行機制:Docker 容器后臺運行,必須有一個前臺進程。

容器運行的命令如果不是那些一直掛起的命令,比如 top、tail  ,運行結(jié)束會自動退出。所以為了讓容器持續(xù)在后臺運行,那么需要將運行的程序以前臺進程的形式運行。

比如這里在后臺運行一個命令,這個命令一直在打印 docker run -d centos /bin/sh -c "while true; do echo  hello zzyy; sleep 2; done",然后我們 logs 查看一下:

怎么安裝配置Docker

docker_logs

退出容器后對容器操作

退出容器后可以通過 exec 方法對正在運行的容器進行操作:

怎么安裝配置Docker

image-20200911142617186

在容器中拷貝文件到外部

拷貝文件使用 cp 命令

$ docker cp [容器ID]/[容器Names]:[要拷貝的文件目錄] [本機目錄]   # 容器文件拷貝到本機 $ docker cp [本機目錄] [容器ID]/[容器Names]:[要拷貝的文件目錄]   # 本機文件拷貝到容器

cp 不僅能把容器中的文件/文件夾拷貝到本機,也可以把本機中的文件/文件夾拷貝到容器。

演示一下,這里先到容器里面創(chuàng)建一個無聊的文件 xixi.txt,然后拷貝到本機:

怎么安裝配置Docker

image-20200921210352644

實用的時候,我們可以拷貝配置、日志等文件到本地。

6. 安裝 MySQL

# 查詢鏡像 $ docker search mysql  # 下載鏡像,實測沒配置鏡像加速的時候會比較慢,配置了就好一些 $ docker pull mysql  # 查看鏡像 $ docker images  # 創(chuàng)建并運行容器 $ docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=888888 -v /Users/sherlocked93/Personal/configs/mysql.d:/etc/mysql/conf.d --name localhost-mysql mysql

稍微解釋一下上面的參數(shù):

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. -p 3307:3306 將本機的 3307 端口映射到 mysql 容器的 3306 端口,根據(jù)需要自行更改;

  3. -e MYSQL_ROOT_PASSWORD=

    設(shè)置遠程登錄的 root 用戶密碼;
  4. --name

    可選,設(shè)置容器別名;
  5. -v xxx/mysql.d:/etc/mysql/conf.d 將本地目錄下設(shè)置文件夾映射到容器的 /etc/mysql/conf.d

  6. -v xxx/logs:/logs 將本機指定目錄下的 logs 目錄掛載到容器的 /logs

  7. -v xxx/data:/var/lib/mysql 將主機制定目錄下的 data 目錄掛載到容器的 /var/lib/mysql

運行截圖:

怎么安裝配置Docker

安裝Mysql

然后去 Navicat 中就可以連接到 MySQL 了。

這也太爽了!真的是幾行命令就裝好了啊,比之前真是快樂多了 ??

7. 安裝 Nginx

Nginx 的安裝和其他的類似,如果你還不太了解 Nginx 如何使用,可以參看這篇文章,看完基本就了解如何使用和配置了。

# 查詢/下載鏡像 $ docker search nginx $ docker pull nginx

怎么安裝配置Docker

image-20200922203203685

然后創(chuàng)建一個臨時的容器,目的是把默認配置拷貝到本機,我這里把配置文件放到 /mnt 目錄下,主要是三個配置文件夾:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. /etc/nginx 放置 Nginx 配置文件;

  3. /var/log/nginx/ 放置 Nginx 日志文件;

  4. /usr/share/nginx/html/ 放置 Nginx 前端靜態(tài)文件都放在這個文件夾;

分別把這幾個目錄都拷貝到本機的 /mnt 文件夾下的 nginx、nginx_logs、html 文件夾。

剛剛創(chuàng)建的臨時容器沒用了 docker rm -f [臨時容器ID] 把臨時容器干掉,然后 docker run 重新創(chuàng)建 Nginx 容器:

$ docker run -d --name localhost-nginx -p 8082:80 \ -v /mnt/nginx:/etc/nginx \ -v /mnt/nginx_logs:/var/log/nginx \ -v /mnt/html:/usr/share/nginx/html \ --privileged=true nginx

--privileged=true 表示容器內(nèi)部對掛載的目錄擁有讀寫等特權(quán)。

其他配置剛剛上面之前已經(jīng)講過,應(yīng)該不用講了。

怎么安裝配置Docker

image-20200922204931582

然后在你自己瀏覽器上就可以訪問了,如果是云服務(wù)器,記得開放對應(yīng)端口。

8. 安裝 Easy Mock

因為 Easy Mock 依賴 RedisMongoDB,因此本地環(huán)境使用 docker-compose 來搭建 Easy Mock  應(yīng)該算是最佳實踐了。

安裝 docker-compose

官方文檔:https://docs.docker.com/compose/install/

首先你得確定擁有 docker 環(huán)境,如果你是 Windows / Mac 用戶,那么安裝客戶端,就會自帶 docker-compose 了。

因為本次我們是在云服務(wù)器 CentOS7.6 上搭建,所以我們需要自行安裝 docker-compose,運行如下命令,下載當前穩(wěn)定版本的  docker-compose

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(unam

修改文件權(quán)限為可執(zhí)行文件

$ sudo chmod +x /usr/local/bin/docker-compose

驗證是否安裝成功

$ docker-compose version

編寫 docker-compose.yml 配置文件

可以參考官方文檔給出的部署文檔,也可以參考我下面的配置過程。

首先新建文件 docker-compose.yml 并將下面 docker-compose 文件內(nèi)容復(fù)制進入  docker-compose.yml,然后將內(nèi)容中注釋位置替換為自己需要的本地地址

version: '3'  services:   mongodb:     image: mongo:3.4.1     volumes:       #  /apps/easy-mock/data/db 是數(shù)據(jù)庫文件存放地址,根據(jù)需要修改為本地地址       - '/apps/easy-mock/data/db:/data/db'     networks:       - easy-mock     restart: always    redis:     image: redis:4.0.6     command: redis-server --appendonly yes     volumes:       #  /apps/easy-mock/data/redis 是 redis 數(shù)據(jù)文件存放地址,根據(jù)需要修改為本地地址       - '/apps/easy-mock/data/redis:/data'     networks:       - easy-mock     restart: always    web:     image: easymock/easymock:1.6.0     # easy-mock 官方給出的文件,這里是 npm start,這里修改為 npm run dev     command: /bin/bash -c "npm run dev:server"     ports:       - 7300:7300  # 改為你自己期望的映射     volumes:       # 日志地址,根據(jù)需要修改為本地地址       - '/apps/easy-mock/logs:/home/easy-mock/easy-mock/logs'     networks:       - easy-mock     restart: always  networks:   easy-mock:

啟動 Easy Mock

在 docker-compose 文件目錄下,運行如下命令:

$ docker-compose up -d

如果遇到 easymock docker 實例報文件權(quán)限錯誤

Error: EACCES: permission denied....

要在項目根目錄執(zhí)行以下命令

$ chmod 777 /yourfile/logs

然后就可以通過瀏覽器上的 你的域名.com:7300 訪問到 easy-mock 了!

如果你覺得域名后面跟著端口號挺難看的,你可以通過配置 Nginx 的二級域名來訪問你部署的 easy-mock,配置二級域名的方法參見 這篇文章

9. 可視化管理

關(guān)于可視化查詢工具,這里就簡單推介一個  LazyDocker,由于是在終端運行的,而且支持鍵盤操作和鼠標點擊,就挺騷氣的,有了這個一些查詢語句可以少打幾次了。

怎么安裝配置Docker

lzd

安裝比較簡單,運行下面的命令:

$ docker run --rm -it -v \ /var/run/docker.sock:/var/run/docker.sock \ -v ~/.config/lazydocker:/.config/jesseduffield/lazydocker \ lazyteam/lazydocke

可以設(shè)置一個終端的 alias

$ alias lzd='docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v ~/.config/lazydocker:/.config/jesseduffield/lazydocker lazyteam/lazydocker'

然后你在終端輸入 lzd 就可以瀏覽你的鏡像、容器、日志、配置、狀態(tài)等等內(nèi)容了。

到此,相信大家對“怎么安裝配置Docker”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

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

AI