Docker安裝、鏡像、容器操作

目錄

背景

簡介

Docker優點

Docker 架構

Host(Docker 宿主機)

Docker daemon(Docker 守護進程)

Images(鏡像)

Containers(容器)

Docker Client(Docker 客戶端)

Registry(倉庫服務註冊)

Docker 安裝

準備

安裝

配置鏡像加速

Docker常用操作

鏡像常用操作

容器常用操作

實例:mysql


背景

開發和運維之間因爲環境不同而導致的矛盾

集羣環境下每臺機器部署相同的應用

DevOps(Development and Operations)

 

簡介

Docker是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。

Docker是世界領先的軟件容器平臺。開發人員利用 Docker 可以消除協作編碼時“在我的機器上可正常工作”的問題。運維人員利用 Docker 可以在隔離容器中並行運行和管理應用,獲得更好的計算密度。企業利用 Docker 可以構建敏捷的軟件交付管道,以更快的速度、更高的安全性和可靠的信譽爲 Linux 和 Windows Server 應用發佈新功能。

Docker優點

簡化程序: Docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux機器上,便可以實現虛擬化。Docker改變了虛擬化的方式,使開發者可以直接將自己的成果放入Docker中進行管理。方便快捷已經是 Docker的最大優勢,過去需要用數天乃至數週的 任務,在Docker容器的處理下,只需要數秒就能完成避免選擇恐懼症: 如果你有選擇恐懼症,還是資深患者。Docker 幫你 打包你的糾結!比如 Docker 鏡像;Docker鏡像中包含了運行環境和配置,所以 Docker 可以簡化部署多種應用實例工作。比如 Web 應用、後臺應用、數據庫應用、大數據應用比如 Hadoop 集羣、消息隊列等等都可以打包成一個鏡像部署。

節省開支: 一方面,雲計算時代到來,使開發者不必爲了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思維定勢。Docker 與雲的結合,讓雲空間得到更充分的利用。不僅解決了硬件管理的問題,也改變了虛擬化的方式。

Docker 架構

Docker使用C/S架構,Client通過接口與Server進程通信實現容器的構建,運行和發佈,如圖:

 

Host(Docker 宿主機)

安裝了Docker程序,並運行了Docker daemon的主機。

Docker daemon(Docker 守護進程)

運行在宿主機上,Docker守護進程,用戶通過Docker client(Docker命令)與Docker daemon交互。

 

Images(鏡像)

將軟件環境打包好的模板,用來創建容器的,一個鏡像可以創建多個容器。

 

鏡像分層結構:

 

位於下層的鏡像稱爲父鏡像(Parent Image),最底層的稱爲基礎鏡像(Base Image)。

最上層爲“可讀寫”層,其下的均爲“只讀”層。

 

AUFS:

  • advanced multi-layered unifification fifilesystem:高級多層統一文件系統
  • 用於爲Linux文件系統實現“聯合掛載”
  • AUFS是之前的UnionFS的重新實現
  • Docker最初使用AUFS作爲容器文件系統層
  • AUFS的競爭產品是overlayFS,從3.18開始被合併入Linux內核
  • Docker的分層鏡像,除了AUFS,Docker還支持btrfs,devicemapper和vfs等

 

Containers(容器)

Docker的運行組件,啓動一個鏡像就是一個容器,容器與容器之間相互隔離,並且互不影響。

 

Docker Client(Docker 客戶端)

Docker命令行工具,用戶是用Docker Client與Docker daemon進行通信並返回結果給用戶。也可以使用其他工具通過Docker Api 與Docker daemon通信。

 

Registry(倉庫服務註冊)

經常會和倉庫(Repository)混爲一談,實際上Registry上可以有多個倉庫,每個倉庫可以看成是一個用戶,一個用戶的倉庫放了多個鏡像。倉庫分爲了公開倉庫(Public Repository)和私有倉庫(Private Repository),最大的公開倉庫是官方的Docker Hub,國內也有如阿里雲、時速雲等,可以給國內用戶提供穩定快速的服務。用戶也可以在本網絡內創建一個私有倉庫。當用戶創建了自己的鏡像之後就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。

 

Docker 安裝

Docker 提供了兩個版本:社區版 (CE) 和企業版 (EE)。

 

操作系統要求

以Centos7爲例,且Docker 要求操作系統必須爲64位,且centos內核版本爲3.1及以上。

查看系統內核版本信息:

uname -r

準備

卸載舊版本:

yum remove docker docker-common docker-selinux docker-engine
yum remove docker-ce

 

安裝依賴包

 

yum install -y yum-utils device-mapper-persistent-data lvm2
#安裝前查看 device-mapper-persistent-data 和lvm2是否已經安裝
rpm -qa|grep  device-mapper-persistent-data
rpm -qa|grep lvm2

設置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

更新yum軟件包索引

yum makecache fast

安裝

安裝最新版本docker-ce

yum install docker-ce -y
#按症狀指定版本docker-ce可使用命令查看
yum list docker-ce.x86_64 --showduplicates | sort -r
#安裝完成之後可以使用命令查看
docker version

配置鏡像加速

 

這裏使用阿里雲的免費鏡像加速服務,也可以使用其他如時速雲、網易雲等

1.註冊登錄開通阿里雲容器鏡像服務

2.查看控制檯,招到鏡像加速器並複製自己的加速器地址

3.找到/etc/docker目錄下的daemon.json文件,沒有則直接 vi daemon.json

4.加入以下配置

#填寫自己的加速器地址
{
"registry-mirrors": ["https://zfzbet67.mirror.aliyuncs.com"]
}

5.通知systemd重載此配置文件;

systemctl daemon-reload

6.重啓docker服務

systemctl restart docker

7.啓動docker:

systemclt start docker

 

Docker常用操作

 

輸入 docker 可以查看Docker的命令用法,輸入 docker COMMAND --help 查看指定命令詳細用法。

 

鏡像常用操作

 

查找鏡像:

docker search 關鍵詞 

#搜索docker hub網站鏡像的詳細信息

下載鏡像:

docker pull 鏡像名:TAG

# Tag表示版本,有些鏡像的版本顯示latest,爲最新版本

查看鏡像:

docker images

# 查看本地所有鏡像

刪除鏡像:

docker rmi -f 鏡像ID或者鏡像名:TAG 

# 刪除指定本地鏡像 

# -f 表示強制刪除

獲取元信息:

docker inspect 鏡像ID或者鏡像名:TAG 

# 獲取鏡像的元信息,詳細信息

容器常用操作

 

運行:

docker run --name myjava8 -d java:8

docker run --name mycentos7 -d -it centos

docker run --name 容器名 -i -t -p 主機端口:容器端口 -d -v 主機目錄:容器目錄:ro 
鏡像ID或鏡像名:TAG
# --name 指定容器名,可自定義,不指定自動命名
# -i 以交互模式運行容器
# -t 分配一個僞終端,即命令行,通常-it組合來使用
# -p 指定映射端口,講主機端口映射到容器內的端口
# -d 後臺運行容器
# -v 指定掛載主機目錄到容器目錄,默認爲rw讀寫模式,ro表示只讀

容器列表:

docker ps -a -q
# docker ps查看正在運行的容器
# -a 查看所有容器(運行中、未運行)
# -q 只查看容器的ID

啓動/停止容器:

docker start/stop 容器ID或容器名

刪除容器:

docker rm -f 容器ID或容器名
# -f 表示強制刪除

查看日誌:

docker logs 容器ID或容器名

進入正在運行容器:

docker exec -it 容器ID或者容器名 /bin/bash
# 進入正在運行的容器並且開啓交互模式終端
# /bin/bash是固有寫法,作用是因爲docker後臺必須運行一個進程,否則容器就會退出,在
這裏表示啓動容器後啓動
bash。
# 也可以用docker exec在運行中的容器執行命令

拷貝文件:

docker cp 主機文件路徑 容器ID或容器名:容器路徑 #主機中文件拷貝到容器中
docker cp 容器ID或容器名:容器路徑 主機文件路徑 #容器中文件拷貝到主機中

 

獲取容器元信息:

docker inspect 容器ID或容器名

實例:mysql

docker pull mysql:5.7
#創建三個要掛載的目錄
mkdir -p /my/mysql/conf
mkdir -p /my/mysql/data
mkdir -p /my/mysql/logs
#複製文件 並修改字符
docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /my/mysql/conf/
vi /my/mysql/conf/mysqld.conf
character-set-server=utf8
#最終啓動命令
docker run \
--name mysql \
-p 3306:3306 \
-v /my/mysql/conf:/etc/mysql/mysql.conf.d/ \
-v /my/mysql/data:/var/lib/mysql \
-v /my/mysql/logs:/logs \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

問題交流羣,不定期分享各種技術文檔:

QQ羣號:464512055

羣二維碼:

這是一個神器的二維碼,掃描之後你會少掉一塊錢。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章