Docker

0x00

前言
好久没更新博客了,感觉每天都在虚度光阴,要给自己指定一个学习计划,让自己忙起来!!
记一下最近刚接触的doker吧,把笔记知识点汇总一下。

0x01

Dcoker 是什么??

Docker的思想来自于集装箱,集装箱解决了什么问题?
在一艘大船上,可以把货物规整的摆放起来。
并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。
那么我就不需要专门运送水果的船和专门运送化学品的船了。
只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。



还不懂什么是docker?那就看看这两个生动形象通俗易懂的例子吧
Case1
Case2




镜像(image)和容器(container)

讲docker 之前必须要提的两个词 镜像 and 容器

那么什么是镜像?什么又是容器呢?

容器

通俗来讲容器就是装东西的箱子,你可以把它理解为 集装箱
容器好比软件集装箱,它内部可以安装任何软件和库文件,做任意的运行环境配置。

  • 镜像是静态的。
  • 一个镜像可以创建多个容器。

镜像

你可以把镜像看成是我们电脑的里面的 软件安装包
Docker运行容器前需要本地存在对应的镜像,一个镜像可以创建多个容器,

  • 容器是动态的。
  • 镜像对于容器只是可读的。


0x02

搭建docker主要流程:

找镜像(search) -> 下镜像(pull) -> 查看镜像(images) -> 镜像中创建容器(run) -> 查看容器(ps)


我用的是centos7搭建的docker
检查centos版本是否支持docker

1.查看内核版本 (是否大于3.10)
uname -r

2.安装docker
yum -y install docker
安装最新版本
yum -y install docker-ce
安装出现问题–>文章

yum install docker-ce- (指定安装版本)

systemctl start docker 开启docker
systemctl enable docker 开机启动
docker version 查看docker版本号

3.验证是否安装成功

docker run hello-world

到这里其实docker已经安装好了,但!安装好仅仅只是第一步骤;
后面还要下载所需的镜像或者使用dockerfile自行构建docker镜像;
最后再部署安装你的应用程序到docker容器中。


一. 镜像

下载CentOS7 镜像
docker pull centos

安装时遇到的问题
x509: certificate has expired or is not yet valid错误解决

这个问题基本上是因为证书出现过期导致。

解决办法
查看虚拟机和远程服务器的时间是否同步:
👇👇
date
若时间不同步,执行
ntpdate cn.pool.ntp.org
若安装失败 检查是否安装了ntpate
yum install ntpdate -y

镜像命令

1.搜索镜像
docker search 关键词

2.获取镜像
docker pull 仓库名称[:tag]

3.查看镜像
docker images

4.删除镜像
docker rmi [image id]
docker rmi [tag] //仓库名

使用 docker rmi [id] 命令时,必须确保该镜像没有被容器使用才能进行;
删除时系统会先删除掉指向该镜像的所有标签,然后删除镜像本身。

5.存出镜像和载入镜像

docker save -o 存储文件名 存储的镜像


二.容器

1.创建容器
docker create
docker run //创建并启动容器

2.查看容器
docker ps
docker ps -a // 查看所有docker

3.启动/终止容器
docker start [names]
docker stop [names]

4.删除容器

  • 终止状态的容器
    docker rm [CONTAINER ID]

  • 正在运行的容器
    docker rm -f [CONTAINER ID]

5.进入容器
docker exec -it [name] bash 进入容器
docker run -i -t centos /bin/bash 创建centos

exec是进入已经存在的容器,run是创建新容器

5.退出容器
ctrl+d 退出容器且关闭

ctrl+p+q 退出容器但不关闭

docker kill -s HUP [容器名]

HUP(1)是让进程挂起,睡眠;
kill (9)六亲不认的杀掉
term(15)正常的退出进程




0x03

docker logs errors and others

遇到问题、运行不了之类的先看日志报错信息!

1. Exited (1) 错误

这个报错信息 是我在使用php镜像创建一个新的容器时出现的,当时只知道傻乎乎的的去百度搜,不知道查看docker logs 报错,导致走了很长的弯路!
错误原因: php的配置文件里 server 被我打成了erver ,发现这个错误的时候 我真的是想把自己揍一顿(复制粘贴都能错)

总结: 细心细心再细心!!

docker los 命令

1
2
3
4
5
6
7
8
docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

2. 配置没问题,访问搭建的nginx不成功

错误原因:

重启下dockers
systemctl restart docker
重启容器
docker restart [name]

再次访问
success!








进入docker 方法

  • exec
    docker exec [names] bash

  • nsenter

1 . 查看容器[id]的进程的PID
docker inspect -f \{\{.State.Pid\}\} [CONTAINER ID]

2 . 使用pid进入容器
nsenter --target $PID --mount --uts --ipc --net --pid
$PID为第一步查询到的PID

about nsenter install


docker卸载

查看已安装的包
yum list installed | grep docker

删除包
yum -y remove docker-engine.x86_64


推荐两个doker 搭建nginxphp 、mysql 的文章

参考:https://blog.51cto.com/11134648/2160257