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等

posted @ 2021-09-07 19:02  SpecialSpeculator  阅读(28)  评论(0编辑  收藏  举报