极客时间运维进阶训练营第一周作业

本周作业

  1. 梳理各 Namespace 的作用。
  2. 使用 apt/yum/ 二进制安装指定版本的 Docker 。
  3. 熟练使用 Docker 数据卷。
  4. 熟练使用 Docker 的 bridge 和 container 模式网络。

Namespace的作用

MNT Namespace  

提供挂载点和文件系统隔离

每个容器具有独立的文件系统,修改容器内的文件不会影响到宿主机及其他容器

极客时间运维进阶训练营第一周作业_第1张图片

 IPC Namespace

提供进程键通信隔离,隔离不同容器之间的进程通信

极客时间运维进阶训练营第一周作业_第2张图片

UTS Namespace

提供主机名隔离,每个容器具有专属的主机名,独立存在不与宿主机和其他容器相同

极客时间运维进阶训练营第一周作业_第3张图片

 PID Namespace

提供进程隔离,每个容器都具有PID=1的主进程及其他子进程,pid编号可以与其他容器相同且互不影响

极客时间运维进阶训练营第一周作业_第4张图片

Net Namespace

提供网络隔离   每个容器都有自己的独立网卡通过vethx接口连接到宿主机docker0网卡获取桥接地址,docker0类似一个虚拟交换机通过MAC地址划分容器内部网络

极客时间运维进阶训练营第一周作业_第5张图片

 User Namespace

提供用户隔离 运行用户在不同的容器创建相同用户名和组,用户权限仅限于本容器内,不具有其他容器文件系统的权限

极客时间运维进阶训练营第一周作业_第6张图片

 Docker安装

apt/在线安装docker

安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

查看docker版本
docker version

查看docker详细信息
docker info

配置镜像加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "graph": "/var/lib/docker",      #容器数据目录
  "registry-mirrors": ["https://73aepdip.mirror.aliyuncs.com"], #镜像加速网站
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "live-restore":false,
  "log-opts": {
    "max-file":"5",
    "max-size": "100m"
  },
  "storage-driver": "overlay2"  #默认存储引擎
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker


Docker数据卷

创建数据卷
docker volume create nginx-volume

查看现有数据卷
docker volume ls
DRIVER    VOLUME NAME
local     nginx-volume

启动容器,挂载已创建数据卷到容器data目录
docker run -itd -p 80:80 -v nginx-volume:/data nginx
4f7798ba91157d0eeee946154ab5f8f3f845c2308d545e9c8f5ca2c4a38c9863

查看容器ID
docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS                               NAMES
4f7798ba9115   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 9 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   brave_aryabhata

进入容器内部
docker exec -it 4f7798ba9115 /bin/bash
root@4f7798ba9115:/# ls
bin   data  docker-entrypoint.d   etc	lib    media  opt   root  sbin	sys  usr
boot  dev   docker-entrypoint.sh  home	lib64  mnt    proc  run   srv	tmp  var

在挂载目录写入文件
echo "welconme to jike" > /data/index.html

在宿主机docker数据卷目录看到相关信息
ls /var/lib/docker/volumes/nginx-volume/_data/
index.html
cat /var/lib/docker/volumes/nginx-volume/_data/index.html
welconme to jike

容器删除后该数据依然存在
docker rm -f 4f7798ba9115
4f7798ba9115
docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
ls /var/lib/docker/volumes/nginx-volume/_data/
index.html

数据目录挂载

宿主机创建挂载目录
mkdir -p /data/webapps

在该目录写入文件
echo "datavolume is mounting" > /data/webapps/index.html

启动容器,指定将宿主机目录挂载到容器中,同一目录可以挂载到多个无状态服务
docker run -itd --name web1 -v /data/webapps/:/usr/share/nginx/html -p 80:80 nginx
docker run -itd --name web2 -v /data/webapps/:/usr/share/nginx/html -p 81:80 nginx

极客时间运维进阶训练营第一周作业_第7张图片

Docker 的 bridge 和 container 模式网络

默认是bridge模式,通过虚拟网桥vethx桥接到docker0
docker run -itd --name web1-bridge -p 80:80 --net=bridge nginx

brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.02427894db85	no		vethf5849c3

container模式 共享一个已存在容器的网络

创建一个容器
docker run -itd --name nginx-container -p 80:80 --net=bridge nginx:1.22.0-alpine、

创建另一个容器,指定网络模式container
docker run -itd --name php-container --net=container:nginx-container php:7.4.30-fpm-alpine

两个容器公用同一个ip
root@ubuntu2004:~# docker exec -it cc48c3d54588 /bin/sh
/var/www/html # ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
18: eth0@if19:  mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

root@ubuntu2004:~# docker exec -it 375babd7b795 /bin/sh
/ # ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
18: eth0@if19:  mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

root@ubuntu2004:~# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.02427894db85	no		vetha79dc13

你可能感兴趣的:(docker,linux,运维)