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
仓库
存放多个镜像的一个仓库