day79 應(yīng)用容器Docker安裝配置運(yùn)用

Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器或Windows 機(jī)器上,也可以實(shí)現(xiàn)虛擬化,容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口怎栽。

一個(gè)完整的Docker有以下幾個(gè)部分組成:
1. Docker Client客戶端
2. Docker Daemon守護(hù)進(jìn)程
3. Docker Image鏡像
4. Docker Container容器

docker容器

1:什么是容器?

容器就是在隔離的環(huán)境中運(yùn)行的一個(gè)進(jìn)程杆故,如果進(jìn)程停止伴逸,容器就會(huì)退出蜀踏。隔離的環(huán)境擁有自己的系統(tǒng)文件撬码,ip地址儿倒,主機(jī)名等

kvm虛擬機(jī),linux呜笑,系統(tǒng)文件

image

程序:代碼夫否,命令
進(jìn)程:正在運(yùn)行的程序

2:容器和虛擬化的區(qū)別

linux容器技術(shù),容器虛擬化和kvm虛擬化的區(qū)別
kvm虛擬化: 需要硬件的支持叫胁,需要模擬硬件慷吊,可以運(yùn)行不同的操作系統(tǒng),啟動(dòng)時(shí)間分鐘級(jí)(開(kāi)機(jī)啟動(dòng)流程)

linux開(kāi)機(jī)啟動(dòng)流程: bios開(kāi)機(jī)硬件自檢 basic input output system 根據(jù)bios設(shè)置的優(yōu)先啟動(dòng)項(xiàng)boot 網(wǎng)卡 硬盤(pán) u盤(pán) 光驅(qū) 讀取grub(mbr)引導(dǎo) 2T UEFI(gpt分區(qū)) mbr硬盤(pán)分區(qū)信息曹抬,內(nèi)核加載路徑,加載內(nèi)核 啟動(dòng)第一個(gè)進(jìn)程/sbin/init systemd 系統(tǒng)初始化完成 運(yùn)行服務(wù)(nginx,httpd,mysql) 谤民。堰酿。。

容器啟動(dòng)流程: 共用宿主機(jī)內(nèi)核: 第一個(gè)進(jìn)程直接啟動(dòng)服務(wù)(nginx张足,httpd触创,mysql)

容器:共用宿主機(jī)內(nèi)核,輕量級(jí)为牍,損耗少哼绑,啟動(dòng)快,性能高碉咆,只能運(yùn)行在linux系統(tǒng)上

虛擬機(jī):需要硬件的支持抖韩,需要模擬硬件,需要走開(kāi)機(jī)啟動(dòng)流程疫铜,可以運(yùn)行不同的操作系統(tǒng)

3:容器技術(shù)的發(fā)展過(guò)程:

1):chroot技術(shù)茂浮,新建一個(gè)子系統(tǒng)(擁有自己完整的系統(tǒng)文件)

參考資料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/ chang root

2):linux容器(lxc) linux container(namespaces 命名空間 隔離環(huán)境 及cgroups 進(jìn)程資源限制)

cgroups 限制一個(gè)進(jìn)程能夠使用的資源。cpu壳咕,內(nèi)存席揽,硬盤(pán)io

kvm虛擬機(jī):資源限制(1c 1G 20G)

需要使用epel源

yum install epel-release -y

編譯epel源配置文件

vi  /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel 7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

安裝lxc

yum install lxc-* -y yum install libcgroup* -y yum install bridge-utils.x86_64 -y

橋接網(wǎng)卡

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
echo 'TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=virbr0' >/etc/sysconfig/network-scripts/ifcfg-eth0
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0 
echo 'TYPE=Bridge
BOOTPROTO=static
NAME=virbr0
DEVICE=virbr0
ONBOOT=yes
IPADDR=10.0.0.11
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=180.76.76.76' >/etc/sysconfig/network-scripts/ifcfg-virbr0

啟動(dòng)cgroup

systemctl start cgconfig.service

啟動(dòng)lxc

systemctl start lxc.service

創(chuàng)建lxc容器

方法1: lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64 
方法2: lxc-create -t centos -n test

為lxc容器設(shè)置root密碼:

[root@controller ~]# chroot /var/lib/lxc/test/rootfs passwd Changing password for user root. New password: BAD PASSWORD: it is too simplistic/systematic BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully.

為容器指定ip和網(wǎng)關(guān)

vi /var/lib/lxc/centos7/config
lxc.network.name = eth0
lxc.network.ipv4 = 10.0.0.111/24
lxc.network.ipv4.gateway = 10.0.0.254

啟動(dòng)容器

lxc-start -n centos7

3):docker容器

centos7.6 2G 10.0.0.11 docker01 host解析
centos7.6 2G 10.0.0.12 docker02 host解析

Docker是通過(guò)進(jìn)程虛擬化技術(shù)(namespaces及cgroups cpu、內(nèi)存谓厘、磁盤(pán)io等)來(lái)提供容器的資源隔離與安全保障等幌羞。由于Docker通過(guò)操作系統(tǒng)層的虛擬化實(shí)現(xiàn)隔離,所以Docker容器在運(yùn)行時(shí)竟稳,不需要類似虛擬機(jī)(VM)額外的操作系統(tǒng)開(kāi)銷属桦,提高資源利用率。 namespace 資源隔離 cgroups 進(jìn)程的資源限制 kvm 虛擬磁盤(pán)文件住练,資源隔離 kvm 資源限制地啰,--cpus --memory

docker 初期把lxc二次開(kāi)發(fā),libcontainer

4:docker的安裝

10.0.0.11:修改主機(jī)名和host解析

rm -fr /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo

yum install docker-ce -y

5:docker的主要組成部分

docker是傳統(tǒng)的CS架構(gòu)分為docker client和docker server,像mysql一樣

命令:docker version

[root@controller ~]# docker version Client: Version: 17.12.0-ce API version: 1.35 Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:10:14 2017 OS/Arch: linux/amd64

Server: Engine: Version: 17.12.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:12:46 2017 OS/Arch: linux/amd64 Experimental: false

docker主要組件有:鏡像讲逛、容器亏吝、倉(cāng)庫(kù), 網(wǎng)絡(luò),存儲(chǔ)

啟動(dòng)容器必須需要一個(gè)鏡像盏混,倉(cāng)庫(kù)存儲(chǔ)鏡像 容器---鏡像---倉(cāng)庫(kù)

6:?jiǎn)?dòng)第一個(gè)容器

docker的主要目標(biāo)是"Build,Ship and Run any App,Angwhere",構(gòu)建蔚鸥,運(yùn)輸,處處運(yùn)行 部署服務(wù)许赃,環(huán)境問(wèn)題

一次構(gòu)建止喷,處處運(yùn)行

docker是一種軟件的打包技術(shù)

docker初次體驗(yàn):
安裝Nginx步驟:
官網(wǎng)下載Nginx源碼包wget
tar 創(chuàng)建Nginx用戶
編譯安裝 ./config.... 修改配置文件, 啟動(dòng)

配置docker鏡像加速

vi  /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}   

docker run -d -p 80:80 nginx
run(創(chuàng)建并啟動(dòng)一個(gè)容器)
-d 放在后臺(tái)
-p 端口映射
nginx docker鏡像的名字

7:docker的鏡像管理

搜索鏡像? docker search 選鏡像的建議:
1混聊,優(yōu)先考慮官方
2弹谁,stars數(shù)量多

官方鏡像倉(cāng)庫(kù)地址:hub.docker.com

獲取鏡像? docker pull(push)?
鏡像加速器:
阿里云加速器,
daocloud加速器,
中科大加速器预愤,
Docker 中國(guó)官方鏡像加速:https://registry.docker-cn.com?官方pull docker pull centos:6.8(沒(méi)有指定版本沟于,默認(rèn)會(huì)下載最新版)
私有倉(cāng)庫(kù)pull docker pull daocloud.io/huangzhichong/alpine-cn:latest

配置docker鏡像加速
vi /etc/docker/daemon.json { "registry-mirrors": ["[https://registry.docker-cn.com](https://registry.docker-cn.com)"] }?

查看鏡像列表?

docker images or docker image ls 

刪除鏡像? docker rmi

例子:docker image rm centos:latest 

導(dǎo)出鏡像? docker save

例子:docker image save centos -o docker-centos7.4.tar.gz 

導(dǎo)入鏡像? docker load

例子:docker image load -i docker-centos7.4.tar.gz?

8:docker的容器管理

docker run -d -p 80:80 nginx:latest  
run(創(chuàng)建并運(yùn)行一個(gè)容器)
-d 放在后臺(tái)
-p 端口映射
-v  源地址(宿主機(jī)):目標(biāo)地址(容器)
nginx docker鏡像的名字
docker run -it --name centos6 centos:6.9 /bin/bash
-it   分配交互式的終端interactive tty
--name 指定容器的名字
/bin/sh覆蓋容器的初始命令
運(yùn)行容器
docker run image_name   
docker run ==== docker create  + docker start
啟動(dòng)容器
docker start
停止容器
docker stop CONTAINER_ID
殺死容器
docker kill container_name
查看容器列表
docker ps(-a -l  -q)

進(jìn)入正在運(yùn)行的容器(目的,調(diào)試植康,排錯(cuò))

docker exec  (會(huì)分配一個(gè)新的終端tty)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it  容器id或容器名字 /bin/bash(/bin/sh)   
docker attach(使用同一個(gè)終端)  偷偷離開(kāi)的快捷鍵ctrl+p,ctrl+q
docker attach [OPTIONS] CONTAINER
nsenter(安裝yum install -y util-linux 棄用)
?刪除容器
docker rm
批量刪除容器
docker rm -f `docker ps -a -q`

總結(jié):docker容器內(nèi)的第一個(gè)進(jìn)程(初始命令)必須一直處于前臺(tái)運(yùn)行的狀態(tài)(必須夯卓跆),否則這個(gè)容器销睁,就會(huì)處于退出狀態(tài)供璧!
業(yè)務(wù)在容器中運(yùn)行:
初始命令一定要夯住并且啟動(dòng)服務(wù)

nginx -g 'daemon off;'
/usr/sbin/zabbix_agentd -f -c /etc/zabbix/zabbix_agentd.conf

9:docker容器的網(wǎng)絡(luò)訪問(wèn)(端口映射)

指定映射(docker 會(huì)自動(dòng)添加一條iptables規(guī)則來(lái)實(shí)現(xiàn)端口映射)? -p hostPort:containerPort? -p ip:hostPort:containerPort 多個(gè)容器都想使用80端口? -p ip::containerPort(隨機(jī)端口)? -p hostPort:containerPort/udp? -p 10.0.0.100::53/udp 使用宿主機(jī)的10.0.0.100這個(gè)ip地址的隨機(jī)端口的udp協(xié)議映射容器的udp53端口? -p 81:80 –p 443:443 可以指定多個(gè)-p

隨機(jī)映射? docker run -P (隨機(jī)端口)

通過(guò)iptables來(lái)實(shí)現(xiàn)的端口映射

10:docker的數(shù)據(jù)卷管理

nginx 站點(diǎn) /usr/share/nginx/html

-v /opt/xiaoniao:/usr/share/nginx/html

持久化 數(shù)據(jù)卷

(文件或目錄)? -v 卷名:/data (第一次卷是空,會(huì)容器的數(shù)據(jù)復(fù)制到卷中,如果卷里面有數(shù)據(jù),把卷數(shù)據(jù)的掛載到容器中)? -v src
(宿主機(jī)的目錄):dst(容器的目錄) 數(shù)據(jù)卷容器? --volumes-from(跟某一個(gè)已經(jīng)存在的容器掛載相同的卷)?
基于nginx啟動(dòng)一個(gè)容器,監(jiān)聽(tīng)80和81冻记,訪問(wèn)80睡毒,出現(xiàn)nginx默認(rèn)歡迎首頁(yè),訪問(wèn)81檩赢,出現(xiàn)小鳥(niǎo)吕嘀。
-p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx 基于nginx多端口的多站點(diǎn)。

11:手動(dòng)將容器保存為鏡像

docker commit 容器id或者容器的名字 新的鏡像名字[:版本號(hào)可選]

1):基于容器制作鏡像

docker run -it -p 80:80 centos:6.9
####
echo "192.168.37.200 mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install nginx -y
yum install unzip -y
cd /usr/share/nginx/html/
rm -fr *
curl -o yiliao.zip http://192.168.37.200/191127/everyxiaoqiang-yiliao-master.zip
unzip yiliao.zip
mv yiliao/* .
####

2)把安裝好服務(wù)的容器,提交成鏡像

docker commit 9f366f3988cd yiliao:v1

3)測(cè)試鏡像功能是否可用

docker run -d -p 81:80 yiliao:v1 nginx -g 'daemon off;'

手動(dòng)制作的鏡像贞瞒,傳輸時(shí)間長(zhǎng) 鏡像初始命令
制作一個(gè)kodexplorer網(wǎng)盤(pán)docker鏡像偶房。nginx + php-fpm(httpd + php)

內(nèi)容總結(jié)

1.什么是容器

容器就是在隔離的環(huán)境中運(yùn)行的一個(gè)進(jìn)程.如果進(jìn)程結(jié)束,容器退出. 這個(gè)隔離的環(huán)境,有自己的系統(tǒng)文件,ip地址,主機(jī)名,進(jìn)程管理

2:容器和虛擬機(jī)的區(qū)別

容器: 不依賴硬件cpu支持共用宿主機(jī)內(nèi)核,輕量級(jí),啟動(dòng)快,性能高,損壞少
虛擬化: 依賴硬件cpu支持,擁有自己的內(nèi)核,

docker用的多: 節(jié)省成本

3:docker-ce的安裝

centos base源 docker engine 1.13
docker.repo
yum install docker-ce 17.03 1903

4:docker主要內(nèi)容

容器 鏡像 倉(cāng)庫(kù) 網(wǎng)絡(luò) 存儲(chǔ) 監(jiān)控

5:docker鏡像常用命令

docker image:
docker image ls 查看鏡像列表
docker image rm 刪除鏡像
docker image load 導(dǎo)入鏡像
docker image save 導(dǎo)出鏡像
docker image pull 下載鏡像(拉取鏡像)
docker image push 上傳鏡像

6:docker容器的常用命令

docker run 創(chuàng)建并啟動(dòng)容器
docker kill 強(qiáng)制關(guān)閉容器
docker rm 刪除容器
docker ps 查看容器列表
docker start 啟動(dòng)容器
docker stop 關(guān)閉容器
docker restart 重啟容器
docker exec 進(jìn)入正在運(yùn)行的容器(分配一個(gè)新的端口)(排查錯(cuò)誤)
docker attach 進(jìn)入正在運(yùn)行的容器(同一個(gè)終端)
docker logs 查看容器的終端輸出(排查錯(cuò)誤)

7:docker端口映射

docker run -p
宿主機(jī)端口:容器端口 最常見(jiàn)
ip1:宿主機(jī)端口:容器端口 ip2:宿主機(jī)端口:容器端口
ip1::容器端口 隨機(jī)端口
ip1::容器端口/udp

-p 宿主機(jī)端口1:容器端口1 -p 宿主機(jī)端口2:容器端口2

docker run -P 自動(dòng)隨機(jī)端口映射

8:docker數(shù)據(jù)卷

docker run -v 宿主機(jī)目錄:容器目錄 -v 宿主機(jī)文件:容器文件

9:手動(dòng)制作鏡像

a:啟動(dòng)一個(gè)基礎(chǔ)容器,在容器安裝自己的服務(wù)
b:把安裝好服務(wù)的容器提交為鏡像
c:測(cè)試鏡像是否可用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市军浆,隨后出現(xiàn)的幾起案子棕洋,更是在濱河造成了極大的恐慌,老刑警劉巖乒融,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掰盘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赞季,警方通過(guò)查閱死者的電腦和手機(jī)愧捕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)申钩,“玉大人次绘,你說(shuō)我怎么就攤上這事∪銮玻” “怎么了邮偎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)义黎。 經(jīng)常有香客問(wèn)我禾进,道長(zhǎng),這世上最難降的妖魔是什么廉涕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任泻云,我火速辦了婚禮艇拍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宠纯。我一直安慰自己淑倾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布征椒。 她就那樣靜靜地躺著,像睡著了一般湃累。 火紅的嫁衣襯著肌膚如雪勃救。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天治力,我揣著相機(jī)與錄音蒙秒,去河邊找鬼。 笑死宵统,一個(gè)胖子當(dāng)著我的面吹牛晕讲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播马澈,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瓢省,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了痊班?” 一聲冷哼從身側(cè)響起勤婚,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涤伐,沒(méi)想到半個(gè)月后馒胆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凝果,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年祝迂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片器净。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡型雳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掌动,到底是詐尸還是另有隱情四啰,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布粗恢,位于F島的核電站柑晒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏眷射。R本人自食惡果不足惜匙赞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一佛掖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涌庭,春花似錦芥被、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至席镀,卻和暖如春匹中,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豪诲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工顶捷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屎篱。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓服赎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親交播。 傳聞我的和親對(duì)象是個(gè)殘疾皇子重虑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348