day01-Docker
1.Namespace 资源隔离
保证应用于应用隔离
- pid 进程编号
- net 网络设备,网络协议栈,端口
- ipc 信号量,消息队列,共享内存,内存隔离
- mount 文件系统,挂载点
- uts 主机名和主机域
- user 操作进程的用户和用户组(linux内核在3.8以上才实现,所以centos要7以上)
上述6个方面做到隔离,才能叫做充分隔离
2.容器化技术探索
chroot 切根,给应用程序切根,就好像应用程序再挂载点上运行,1979年的方案。文件系统的独立和隔离
2000年,freebsd,
cgroups操作系统内核,独立的控制cpu资源,内存资源
lxc,linux container 开启了容器在生产上应用的脚步,应用程序6个维度上的隔离
docker,2013出现,一桶容器脚本,简单,快捷,高效,便利,统一。隔离做的非常好
一次设计,多次使用
基于容器的,轻量级解决方案
容器引擎
3.核心
内核,用的是宿主机内核。二进制空间和libs都用的自己的
qumo,虚拟机的磁盘io,损耗大
aufs,docker是挂载的,磁盘性能要优于虚拟化,节约成本
帮助企业和老板,省纯利润
4.yum源,epel源装好
yum list docker --show-duplicates
// 可以发现里面的版本还是1.13.1-102
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install epel-release -y
5.安装docker-ce
yum install docker-ce -y
6.启动docker引擎
systemctl enable docker
systemctl start docker
7.docker命令
mkdir /etc/docker
docker info
8.修改配置文件
vim /etc/docker/daemon.json
graph:工作目录
registry-mirrors: 国内镜像站
bip: docker的网络,建议容器地址和宿主机的ip地址最后2位是一样的
exec-opts:执行参数
live-restore:引擎死掉,用引擎起来的容器还活着
{
"graph":"/data/docker",
"storage-driver":"overlay2",
"insecure-registries":[
"registry.access.redhat.com",
"quay.io"
],
"registry-mirrors":[
"https://q2qr04ke.mirror.aliyuncs.com"
],
"bip":"172.7.5.0/24",
"exec-opts":[
"native.cgroupdriver=systemd"
],
"live-restore":true
}
9.详细文档
https://cloud.tencent.com/developer/article/1701451
yum install docker-ce-18.03.1.ce
13.docker镜像
docker search
docker pull
14.docker镜像特性
一层一层叠加的
writable 层
apache image(只读层)
centos image(只读层)
base image(只读层)
docker镜像位于bootfs纸上
(bootfs底层依赖的库,和内核交互的东西)
15.docker容器的基本操作
镜像-》实例化而来的
(1)查看本地的容器进程
docker ps -a
(2)查看镜像
docker images | grep hello
(3)启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-i : 启动可交互的容器,并持续打开标准输入
-t:表示使用终端关联到容器的标准输入上
-d:表示容器放置后台运行
-rm:退出后删除容器
-name:表示定义容器唯一名称
IMAGE:表示要运行的容器
COMMAND:表示启动容器时要运行的命令
docker run -it oldboy1103/alpine:latest /bin/sh
docker run --rm oldboy1103/alpine:latest /bin/echo hello
运行完后,docker ps -a是看不到,输出hello后就退出了,自己把它从ps -a中删了
非交互式启动后台容器
docker run -d --name myalpine oldboy1103/alpine:latest /bin/sleep 300
运行到后台,并要指定init为1的pid
(4)查看容器中的应用在宿主机是否能查到
ps aux | grep sleep | grep -v grep
(5)docker 进入up状态的容器
docker exec -it e0b7fcf28418 /bin/sh
(6)停止容器
docker ps -a 查看当前容器
docker stop e0b7fcf28418
docker restart e0b7fcf28418
(7)删除容器
docker rm e0b7fcf28418
(8)批量删除宿主机上的所有容器
for i in `docker ps -a | grep -i exit | sed '1d' | awk '{print $1}'`
do
docker rm -f $i
done
(9)提交修改到容器里
docker commit -p e0b7fcf28418 oldboy1103/alpine:v3.10.3_with_1.txt // 产生了新的镜像,固话到了只读层
(10)导出镜像
docker save imageId > alpine:v3.10.3_with_1.txt.tar
(11)干掉镜像
docker rmi -f e0b7fcf28418
(12)导入镜像
docker load < alpine:v3.10.3_with_1.txt.tar
docker tag e0b7fcf28418 oldboy1103/alpine:v3.10.3_with_1.txt
(13)如何查看容器的日志
docker run hello-world 2>&1 >> /dev/null
docker logs e0b7fcf28418
docker logs -f e0b7fcf28418
16.docker容器的高级操作
映射端口
docker run -p 容器外端口:容器内端口
(1)下载nginx镜像
docker pull nginx:1.2.3
(2)查看镜像
docker images ls
(3)打个标签
docker tag 4037a5563b03 oldboy1103/nginx:v1.2.3
(4)查看镜像
docker images
(5)映射端口
docker run --rm -name mynginx -d -p81:80 oldboy1103/nginx:v1.2.3
netstat -tulnp | grep 81
curl 127.0.0.1:81
挂载数据卷
docker run -v 容器外目录:容器内目录
宿主机上创建目录mkdir ~/html
wget htpp://baidu.com -O ~/html/index.html
docker run -d --rm --name nginx_with_baidu -p81:80 -v /root/html:/usr/share/nginx/html oldboy1103/nginx:v1.2.3
docker inspect 4037a5563b03 // 容器运行的一些细节
docker exec -it nginx_with_baidu /bin/bash
# ls /usr/share/nginx/html
看到16视频的14:23秒
传递环境变量
docker run -e 环境变量key:变量变量value
容器内安装软件(工具)
yum/apt-get/apt等