Docker容器01

一、什么是docker容器?

容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,ip地址,主机名、进程管理等
程序:代码,命令
进程:正在运行的程序

二、容器和虚拟化的区别

1、linux容器技术,容器虚拟化和kvm虚拟化的区别:

kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)

2、linux开机启动流程:

  • bios开机硬件自检
  • 根据bios设置的优先启动项boot 网卡 硬盘 u盘 光驱
  • 读取grub引导(mbr分区) 2T UEFI(gpt分区) mbr硬盘分区信息,内核加载路径
  • 加载内核
  • 启动第一个进程/sbin/init或systemd
  • 系统初始化完成
  • 运行服务 nginx

3、容器启动流程

  • 共用宿主机内核
  • 启动第一个进程,服务nginx,httpd,mysql等。

4、容器特点

优势:容器,共用宿主机linux内核,容器的第一个进程直接运行服务,轻量级,损耗少,启动快,性能高。
劣势:只支持linux,不支持其他系统。

5、kvm与docker区别

kvm:分钟级启动,占用磁盘空间大,网络延时大,资源隔离较好,支持多系统。
docker:秒启动,占用磁盘空间小,网络延时小,资源隔离较差,只支持linux系统。

三、容器技术的发展过程

1、chroot技术

改变根目录,新建一个子系统(拥有自己完整的系统文件)

2、linux容器(lxc)

linux container(namespaces 命名空间,隔离环境及cgroups 进程资源限制)
cgroups :限制一个进程能够使用的硬件资源。cpu,内存,硬盘io等。

四、容器lxc创建

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、桥接网卡

[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、创建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容器设置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和网关

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社区版Community Edition,另一个是ee企业版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系统命令

查看系统信息
docker system info
查看进程信息
docker system events
查看磁盘情况
docker system df
删除所有容器,清除
docker system prune
查看镜像列表
docker images docker image ls
删除镜像
docker image rm centos:latest
导出镜像
docker image save centos > docker-centos7.4.tar.gz

docker image save -o docker_nginx.tar.gz nginx:latest
导入镜像
docker load 例子:docker image load -i docker-centos7.4.tar.gz

八、docker主要组件

镜像、容器、仓库, 网络,存储
镜像:做好的系统
容器:链接镜像系统文件
仓库:纯镜像

九、启动第一个容器

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(创建并运行一个容器)
-d 放在后台
-p 端口映射
nginx docker镜像的名字

4、docker的镜像管理

搜索镜像
docker search
选镜像的建议:
1,优先考虑官方
2,stars数量多

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(创建并运行一个容器)
-d 放在后台
-p 端口映射
-v 源地址(宿主机):目标地址(容器)
nginx docker镜像的名字

docker run -it --name centos6 centos:6.9 /bin/bash
-it 分配交互式的终端
--name 指定容器的名字
/bin/sh覆盖容器的初始命令

十、启动关闭查询容器

启动容器

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

十一、容器相关操作实验

目的:调试和排错

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容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!

3、端口映射

[root@doceker01 ~]# docker run -p 1080:80 -d nginx:latest
指定映射(docker 会自动添加一条iptables规则来实现端口映射)
-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来实现的端口映射

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网盘docker镜像。nginx + php-fpm(httpd + php)

第一步:启动一个容器,并在容器中安装好软件。第二步:把安装好软件的容器提交为镜像。第三步:测试镜像能不能夯住和服务是否正常启动。

[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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 数组特性: 基于特性2:连续的内存空间和相同类型数据: 理解:随机访问特性(根据下标进行访问) 理解:插入操作(注...
    写啥呢阅读 352评论 1 1