一宁否、什么是docker容器窒升?
容器就是在隔離的環(huán)境運行的一個進程,如果進程停止慕匠,容器就會銷毀饱须。隔離的環(huán)境擁有自己的系統(tǒng)文件,ip地址台谊,主機名蓉媳、進程管理等
程序:代碼譬挚,命令
進程:正在運行的程序
二、容器和虛擬化的區(qū)別
1酪呻、linux容器技術(shù)减宣,容器虛擬化和kvm虛擬化的區(qū)別:
kvm虛擬化: 需要硬件的支持,需要模擬硬件玩荠,可以運行不同的操作系統(tǒng)漆腌,啟動時間分鐘級(開機啟動流程)
2、linux開機啟動流程:
- bios開機硬件自檢
- 根據(jù)bios設(shè)置的優(yōu)先啟動項boot 網(wǎng)卡 硬盤 u盤 光驅(qū)
- 讀取grub引導(dǎo)(mbr分區(qū)) 2T UEFI(gpt分區(qū)) mbr硬盤分區(qū)信息阶冈,內(nèi)核加載路徑
- 加載內(nèi)核
- 啟動第一個進程/sbin/init或systemd
- 系統(tǒng)初始化完成
- 運行服務(wù) nginx
3闷尿、容器啟動流程
- 共用宿主機內(nèi)核
- 啟動第一個進程,服務(wù)nginx眼溶,httpd悠砚,mysql等。
4堂飞、容器特點
優(yōu)勢:容器灌旧,共用宿主機linux內(nèi)核,容器的第一個進程直接運行服務(wù)绰筛,輕量級枢泰,損耗少,啟動快铝噩,性能高衡蚂。
劣勢:只支持linux,不支持其他系統(tǒng)骏庸。
5毛甲、kvm與docker區(qū)別
kvm:分鐘級啟動,占用磁盤空間大具被,網(wǎng)絡(luò)延時大玻募,資源隔離較好,支持多系統(tǒng)一姿。
docker:秒啟動七咧,占用磁盤空間小,網(wǎng)絡(luò)延時小叮叹,資源隔離較差艾栋,只支持linux系統(tǒng)。
三蛉顽、容器技術(shù)的發(fā)展過程
1蝗砾、chroot技術(shù)
改變根目錄,新建一個子系統(tǒng)(擁有自己完整的系統(tǒng)文件)
2、linux容器(lxc)
linux container(namespaces 命名空間悼粮,隔離環(huán)境及cgroups 進程資源限制)
cgroups :限制一個進程能夠使用的硬件資源拇泣。cpu,內(nèi)存矮锈,硬盤io等霉翔。
四、容器lxc創(chuàng)建
1苞笨、安裝epel源
yum install epel-release -y
2债朵、編譯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
3、安裝lxc
yum install lxc-* -y
yum install libcgroup* -y
yum install bridge-utils.x86_64 -y
4瀑凝、橋接網(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
5序芦、啟動cgroup
systemctl start cgconfig.service
6、啟動lxc
systemctl start lxc.service
7粤咪、創(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
8谚中、為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.
9、為容器指定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
10寥枝、啟動容器
lxc-start -n centos7
五宪塔、Docker容器安裝
1、更改主機IP地址
10.0.0.11:修改主機名和host解析
2囊拜、刪除之前默認的yum源
rm -fr /etc/yum.repos.d/local.repo
3某筐、配置阿里云yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
4、下載安裝docker
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
小提示:docker分兩個版本冠跷,一個是ce社區(qū)版Community Edition南誊,另一個是ee企業(yè)版Enterprise Edition。
六蜜托、檢查啟動docker
[root@doceker01 yum.repos.d]# docker version
Client:
Version: 18.09.7
API version: 1.39
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:56:06 2019
OS/Arch: linux/amd64
Experimental: false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@doceker01 yum.repos.d]# systemctl start docker
[root@doceker01 yum.repos.d]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@doceker01 yum.repos.d]# docker version
Client:
Version: 18.09.7
API version: 1.39
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:56:06 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.7
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:26:28 2019
OS/Arch: linux/amd64
Experimental: false
七抄囚、docker系統(tǒng)命令
查看系統(tǒng)信息
docker system info
查看進程信息
docker system events
查看磁盤情況
docker system df
刪除所有容器,清除
docker system prune
查看鏡像列表
docker images docker image ls
刪除鏡像
docker image rm centos:latest
導(dǎo)出鏡像
docker image save centos > docker-centos7.4.tar.gz
或
docker image save -o docker_nginx.tar.gz nginx:latest
導(dǎo)入鏡像
docker load 例子:docker image load -i docker-centos7.4.tar.gz
八橄务、docker主要組件
鏡像幔托、容器、倉庫, 網(wǎng)絡(luò)仪糖,存儲
鏡像:做好的系統(tǒng)
容器:鏈接鏡像系統(tǒng)文件
倉庫:純鏡像
九柑司、啟動第一個容器
1迫肖、配置源
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
2锅劝、啟動docker
systemctl restart docker
3、下載鏡像
docker run -d -p 80:80 nginx
run(創(chuàng)建并運行一個容器)
-d 放在后臺
-p 端口映射
nginx docker鏡像的名字
4蟆湖、docker的鏡像管理
搜索鏡像
docker search
選鏡像的建議:
1故爵,優(yōu)先考慮官方
2,stars數(shù)量多
5、下載鏡像
docker pull(push)默認下載最新版本
鏡像加速器:阿里云加速器诬垂,daocloud加速器劲室,中科大加速器,Docker 中國官方鏡像加速:https://registry.docker-cn.com
官方pull docker pull centos:6.8(沒有指定版本结窘,默認會下載最新版)
私有倉庫pull docker pull daocloud.io/huangzhichong/alpine-cn:latest
6很洋、docker的容器管理
docker run -d -p 80:80 nginx:latest
run(創(chuàng)建并運行一個容器)
-d 放在后臺
-p 端口映射
-v 源地址(宿主機):目標(biāo)地址(容器)
nginx docker鏡像的名字
docker run -it --name centos6 centos:6.9 /bin/bash
-it 分配交互式的終端
--name 指定容器的名字
/bin/sh覆蓋容器的初始命令
十、啟動關(guān)閉查詢?nèi)萜?/h1>
啟動容器
docker run image_name
docker run -it image_name CMD
docker run ==== docker create + docker start
停止容器
docker stop CONTAINER_ID
殺死容器
docker kill container_name
查看容器列表
docker ps
docker ps –a
十一隧枫、容器相關(guān)操作實驗
目的:調(diào)試和排錯
1喉磁、進入容器
[root@doceker01 ~]# docker run -it centos:6.9
docker attach(使用同一個終端)
docker attach [OPTIONS] CONTAINER
使用ctrl + p,ctrl + q官脓,可查看歷史命令
[root@doceker01 ~]# docker container attach b553a8e556dc
退出后歷史命令消失
docker exec (會分配一個新的終端tty
docker exec [OPTIONS] CONTAINER COMMAND [ARG...])
2协怒、刪除容器
刪除容器
docker rm
[root@doceker01 ~]# docker container rm +容器名稱
批量刪除容器
docker rm -f docker ps -a -q
小提示:docker容器內(nèi)的第一個進程(初始命令)必須一直處于前臺運行的狀態(tài)(必須夯住)卑笨,否則這個容器孕暇,就會處于退出狀態(tài)!
3赤兴、端口映射
[root@doceker01 ~]# docker run -p 1080:80 -d nginx:latest
指定映射(docker 會自動添加一條iptables規(guī)則來實現(xiàn)端口映射)
-p hostPort:containerPort
-p ip:hostPort:containerPort 多個容器都想使用80端口
-p ip::containerPort(隨機端口)
-p hostPort:containerPort:udp
-p 10.0.0.100::53:udp
-p 81:80 –p 443:443 可以指定多個-p
隨機映射
docker run -P (隨機端口)
通過iptables來實現(xiàn)的端口映射
4妖滔、手動制作鏡像
docker commit 容器id或者容器的名字 新的鏡像名字[:版本號可選]
1):基于容器制作鏡像
docker run -it centos:6.9
yum install httpd
yum install openssh-server
/etc/init.d/sshd start
vi /init.sh
!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
chmod +x /init.sh
2)將容器提交為鏡像
docker commit oldboy centos6-ssh-httpd:v1
3)測試鏡像功能是否可用
手動制作的鏡像,傳輸時間長
鏡像初始命令
制作一個kodexplorer網(wǎng)盤docker鏡像桶良。nginx + php-fpm(httpd + php)
第一步:啟動一個容器铛楣,并在容器中安裝好軟件。第二步:把安裝好軟件的容器提交為鏡像艺普。第三步:測試鏡像能不能夯住和服務(wù)是否正常啟動簸州。
[root@doceker01 ~]# docker container commit b66dc34e7d95 centos6.9_ssh:v1
sha256:b6e7ff54c44526f249a7e5a40ed47bef6e3206c524b4b663b201fe69da8ffda6
[root@doceker01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos6.9_ssh v1 b6e7ff54c445 11 seconds ago 307MB
busybox latest e4db68de4ff2 2 weeks ago 1.22MB
nginx latest 719cd2e3ed04 2 weeks ago 109MB
centos 6.9 adf829198a7f 10 months ago 195MB
daocloud.io/huangzhichong/alpine-cn latest e8289dcc1d4b 2 years ago 3.98MB