目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

Docker

NameSpace

实现了资源隔离

UTS:每一个NameSpace都拥有独立的主机或域名,可以把每个NameSpace认为一个独立主机。

IPC:每个容器依旧使用linux内核中进程交互的方法,实现进程间通信

Mount:每个容器的文件系统是独立的

Net:每个容器的网络是隔离

User: 每个容器的用户和组ID是隔离,每个容器都拥有root用户

PID:每个容器都拥有独立的进程树,由容器是物理机中的一个进程,所以容器中的进程是物理机一个进程的线程

容器使用的命名空间有哪些?

应用程序运行环境隔离的空间,就是一个容器,每一个容器都将拥有UTS,IPC,Mount,Net,User,PID。

CGroup

实现了资源限制、限制、审计等…

LXC

Linux Container,可以提供轻量级的虚拟化。Docker底层就是使用LXC来实现的。以LXC为基础实现了更强的功能。

Docker安装

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

yum -y install docker-ce

systemctl enable docker

systemctl restart docker

sudo yum list docker-ce.x86_64 --showduplicates | sort -r

docker -v 

docker version

镜像加速器

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://demo.888bit3po.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

镜像

打包好的环境与应用

# 查看本地所有镜像
[root@localhost ~]# docker images

# 查找镜像
[root@localhost ~]# docker search centos

# 拉取镜像
[root@localhost ~]# docker push centos

# 删除镜像
[root@localhost ~]# docker rmi de974760ddb2

# 导出镜像
[root@localhost ~]# docker save centos:latest -o /root/centos_latest
[root@localhost ~]# ll -h /root/centos_latest 
-rw-------. 1 root root 207M Apr 26 10:29 /root/centos_latest

# 导入镜像
[root@localhost ~]# docker load < /root/centos_latest









镜像仓库

1、官方自建镜像仓库(网络太慢)

2、阿里云自建镜像仓库

# 登录阿里云Docker Registry
docker login --username=soulboy1990116 registry.cn-shanghai.aliyuncs.com

# 从Registry中拉取镜像
docker pull registry.cn-shanghai.aliyuncs.com/leon_ns/test:[镜像版本号]
docker pull registry.cn-shanghai.aliyuncs.com/leon_ns/test:v1

# 将镜像推送到Registry
docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/leon_ns/test:[镜像版本号]
docker tag 300e315adb2f registry.cn-shanghai.aliyuncs.com/leon_ns/test:v1

docker push registry.cn-shanghai.aliyuncs.com/leon_ns/test:[镜像版本号]
docker push registry.cn-shanghai.aliyuncs.com/leon_ns/test:v1

# 退出阿里云
docker logout registry.cn-shanghai.aliyuncs.com

3、通过Harbor搭建自己的企业级镜像仓库

Harbor

Harbor是由VMware公司开源出来的企业级Registry项目,可以帮助用户快速搭建一个企业级的Docker Registry服务。

Harbor由python语言开发,需要使用docker-compose工具进行启动。

需要的工具:

  • 使用epel源安装pip
  • 使用pip安装docker-compose

安装docker和python2-pip、安装docker-compose

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install epel-release -y

yum clean all

yum makecache fast

yum install -y docker-ce python2-pip

systemctl start docker

systemctl enable docker

pip install --upgrade pip


# 如果以上不成功安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

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


pip install docker-compose

安装Harbor

[root@localhost software]# tar xf harbor-offline-installer-v1.8.2.tgz -C /usr/local/
[root@localhost software]# cd /usr/local/harbor/
[root@localhost harbor]# ls
harbor.v1.8.2.tar.gz  harbor.yml  install.sh  LICENSE  prepare
[root@localhost harbor]# vim harbor.yml
5 hostname: 192.168.31.211
harbor_admin_password: 123
[root@localhost harbor]# ./install.sh

# 访问 http://192.168.31.211/
admin 
123

客户端测试

# 修改为非安装方式连接harbor
[root@localhost ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://sds.888bit3po.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.31.211"]
}
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

# 登录
docker login 192.168.31.211
admin
123

# 上传
docker tag SOURCE_IMAGE[:TAG] 192.168.31.211/library/IMAGE[:TAG]
docker tag hello-world 192.168.31.211/library/hello-world:v1

docker push 192.168.31.211/library/IMAGE[:TAG]
docker push 192.168.31.211/library/hello-world:v1

# 下载
docker pull 192.168.31.211/library/hello-world:v1

容器

运行镜像的实例

# 用hello-world 镜像来启动一个容器
docker run hello-world

# -d表示后台运行(不输出结果到屏幕)
docker run -d centos /bin/bash -c "while true; do echo haha;sleep 3;done"

# 查看后台日志结果
docker logs 50d2dd324a1e

# 查看容器的状态信息
docker inspect de2e6a1763eb

# 交互模式
docker run -it --name=c1 centos:latest /bin/bash

# 进入正在运行的容器
docker attach 20cf1bda4f4f

# 把修改过的容器保存成一个新的镜像(进入容器touch 2222文件)
docker commit 20cf1bda4f4f test:v1
docker run -it --name=c1 test:v1 /bin/bash # 启动修改好的镜像,发现新容器中有2222文件
[root@cf6ac75a432d /]# ls
2222  bin  


仓库

存放多个镜像的一个仓库


作者:Soulboy