centos8 安装docker

centos8 centos7 安装docker可以参考官方地址:https://docs.docker.com/install/linux/docker-ce/centos/

奔主题开始安装

首先安装依赖

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

 

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

 

sudo yum install docker-ce docker-ce-cli containerd.io

 

如果报错:Problem: package docker-ce-3:19.03.4-3.el7.x86_64 requires containerd.io >= 1.2.2-3 那就先装新版的 containerd.io

 

 

安装 containerd.io  这步一般要优先

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

 

再装剩下两个

sudo yum install docker-ce docker-ce-cli

 

sudo systemctl start docker

 

docker --version

 

开机自启

sudo systemctl enable docker

接下来运行hello 进入docker世界

docker run hello-world  

centos8 安装docker

 

 

Docker基本操作

容器操作

docker [run|start|stop|restart|kill|rm|pause|unpause]

  • run/create[镜像名]  创建一个新的容器并运行一个命令
  • start/stop/restart[容器名]:启动/停止/重启一个容器
  • kill [容器名]: 直接杀掉容器,不给进程响应时间
  • rm[容器名]:删除已经停止的容器
  • pause/unpause[容器名]:暂停/恢复容器中的进程

docker [ps|inspect|exec|logs|export|import]

  • ps:查看容器列表(默认查看正在运行的容器,-a查看所有容器
  • inspect[容器名]:查看容器配置元数据
  • exec -it [容器名] /bin/bash:进入容器环境中交互操作
  • logs --since="2019-02-01" -f --tail=10 [容器名]:查看容器日志 
  • cp path1 [容器名]:path 容器与主机之间的数据拷贝
  • export -o test.tar [容器名] / docker export [容器名]>test.tar : 文件系统作为一个tar归档文件
  • import test.tar [镜像名:版本号]:导入归档文件,成为一个镜像

 

 

镜像操作

docker images|rmi|tag|build|history|save|load]

  • images列出本地镜像列表
  • rmi [镜像名:版本]:删除镜像
  • tag [镜像名:版本] [仓库]/[镜像名:版本]:标记本地镜像,将其归入某一仓库
  • build -t [镜像名:版本] [path]Dockerfile 创建镜像
  • history [镜像名:版本]: 查看指定镜像的创建历史
  • save -o xxx.tar [镜像名:版本] /  save [镜像名:版本]>xxx.tar : 镜像保存成 tar 归档文件
  • load --input  xx.tar / docker load<xxx.tar : 从归档文件加载镜像

镜像与容器原理及用法探究

history命令查看镜像层

例:docker history hello-world

 

显示镜像hello-world分三层,其中两个空层

查看镜像文件

镜像存放在imagedb里

一般在image/overlay2/imagedb/content/sha256下

 

 

打开一个镜像文件查看其内容:

cat f09fe80eb0e75e97b04b9dfb065ac3fda37a8fac0161f42fca1e6fe4d0977c80

{

"architecture": "amd64",

"config": {

"Hostname": "",

"Domainname": "",

"User": "",

"AttachStdin": false,

"AttachStdout": false,

"AttachStderr": false,

"Tty": false,

"OpenStdin": false,

"StdinOnce": false,

"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],

"Cmd": ["/hello"],

"ArgsEscaped": true,

"Image": "sha256:a6d1aaad8ca65655449a26146699fe9d61240071f6992975be7e720f1cd42440",

"Volumes": null,

"WorkingDir": "",

"Entrypoint": null,

"OnBuild": null,

"Labels": null

},

"container": "8e2caa5a514bb6d8b4f2a2553e9067498d261a0fd83a96aeaaf303943dff6ff9",

"container_config": {

"Hostname": "8e2caa5a514b",

"Domainname": "",

"User": "",

"AttachStdin": false,

"AttachStdout": false,

"AttachStderr": false,

"Tty": false,

"OpenStdin": false,

"StdinOnce": false,

"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],

"Cmd": ["/bin/sh", "-c", "#(nop) ", "CMD [\"/hello\"]"],

"ArgsEscaped": true,

"Image": "sha256:a6d1aaad8ca65655449a26146699fe9d61240071f6992975be7e720f1cd42440",

"Volumes": null,

"WorkingDir": "",

"Entrypoint": null,

"OnBuild": null,

"Labels": {}

},

"created": "2019-01-01T01:29:27.650294696Z",

"docker_version": "18.06.1-ce",

"history": [{

"created": "2019-01-01T01:29:27.416803627Z",

"created_by": "/bin/sh -c #(nop) COPY file:f77490f70ce51da25bd21bfc30cb5e1a24b2b65eb37d4af0c327ddc24f0986a6 in / "

}, {

"created": "2019-01-01T01:29:27.650294696Z",

"created_by": "/bin/sh -c #(nop)  CMD [\"/hello\"]",

"empty_layer": true

}],

"os": "linux",

"rootfs": {

"type": "layers",

"diff_ids": ["sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3"]

}

}

 

----其中,history数组内,标识了镜像的历史记录(与history命令内容对应)

----rootfs的diff_ids中,对应了依赖使用中镜像层文件(history命令中size大于0的层)

 

查看镜像层文件

层文件在layerdb里

ll /var/lib/docker/image/overlay2/layerdb/sha256

 

#镜像层文件内结构:

centos8 安装docker

 

 

镜像与容器总结

一个镜像就是一层层的layer层文件,盖楼而成,上层文件叠于下层文件上,若上层文件有与下层文件重复的,则覆盖掉下层文件重复的部分,如下图:

 

centos8 安装docker

---------初始挂载时读写层为空。

---------当需要修改镜像内的某个文件时,只对处于最上方的读写层进行了变动,不复写下层已有文件系统的内容,已有文件在只读层中的原始版本仍然存在,但会被读写层中的新版本文件所隐藏,当 docker commit 这个修改过的容器文件系统为一个新的镜像时,保存的内容仅为最上层读写文件系统中被更新过的文件。

---------联合挂载是用于将多个镜像层的文件系统挂载到一个挂载点来实现一个统一文件系统视图的途径,是下层存储驱动(aufs、overlay等) 实现分层合并的方式。

容器创建详解

交互式创建容器并进入:

 

docker run -it --name centos centos /bin/bash(前台进程)

------------------------exit退出也关闭容器; Ctrl+P+Q退出不关闭容器

 

后台启动容器:

 

docker run -d --name nginx nginx

进入已运行的容器:

docker exec -it nginx /bin/bash

查看容器的元数据: docker inspect nginx  

绑定容器端口到主机:

docker run -d -p 8080:80 --name nginx nginx:latest

挂载主机文件目录到容器内:

 docker run -dit -v /root/peter_dir/:/pdir --name cent centos

复制主机文件到容器内:

docker cp anaconda-ks.cfg cent:/var