目录

一. 安装Docker

二. hello-world项目的运行流程和docker运行原理

三. docker的常用命令(查看官方文档)

四. 日志,元数据,进程的查看

五. 进入当前正在运行的容器 


docker 官方文档:https://docs.docker.com/

docker 仓库:https://hub.docker.com/

docker的核心思想:使用镜像进行隔离,使得两部分之间不受影响,类似于一个沙箱;,Docker属于容器化技术,不是模拟一个完成的系统,模拟系统最核心的部分,所以不像虚拟机一样笨重,比较轻量级。

一. 安装Docker

下面是基于Centos 7 使用仓库安装的方式,根据官方文档的提示一步步地安装即可:

1. 如果之前安装了docker版本需要卸载掉之前的版本,使用:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2. 安装相关的软件包

yum install -y yum-utils

3. 在安装docker之前需要设置docker的镜像,之后就可以使用这个仓库来安装和更新docker,这里可以设置为阿里云的docker仓库这样下载速度比较快:

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

更新软件包索引确保安装的环境是最新的:

yum makecache fast

安装docker,docker-ce表示社区版,docker-ee表示企业版,使用:

yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

4. 启动docker,运行下面的命令,但是运行之后如果没有出现任何信息说明启动的时候应该没有异常:

systemctl start docker

如果哪一个过程出现错误,还是重新卸掉再安装否则docker中的哪一部分没有安装成功是无法成功启动的;

5. 使用docker version判断启动docker启动的情况:

docker version

6. 使用hello-world 测试,在执行run命令的时候发现现实没有找到hello-world项目,所以从远程仓库中拉取,拉去成功之后输出签名信息,最终输出Hello from Docker!说明成功安装了docker并且运行hello-world项目成功:

docker run hello-world

7. 卸载docker,/var/lib/docker 为docker的工作目录:

yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker 
rm -rf /var/lib/containerd

下面是成功安装docker过程截图,docker安装的时候最麻烦是依赖关系的问题,之前不知道哪里搞错了导致安装了很久都无法启动docker,最后重新安装了centos 7按照上面的步骤才安装成功:

docker命令自动填补容器名字 docker 容器命令_Docker

docker命令自动填补容器名字 docker 容器命令_Docker_02

docker命令自动填补容器名字 docker 容器命令_Docker_03

docker命令自动填补容器名字 docker 容器命令_docker_04

docker命令自动填补容器名字 docker 容器命令_centos_05

docker命令自动填补容器名字 docker 容器命令_centos_06

docker命令自动填补容器名字 docker 容器命令_docker_07

二. hello-world项目的运行流程和docker运行原理

docker命令自动填补容器名字 docker 容器命令_Docker_08

底层原理:docker是如何工作的呢?docker是一个Client-Server结构的系统,docker的守护进程运行在主机上,通过socker从客户端进行访问,DockerServer接收到Docker-Client的指令,就会执行这个指令;

docker命令自动填补容器名字 docker 容器命令_docker命令自动填补容器名字_09

docker为什么比虚拟机快?1. docker有着比虚拟机更少的抽象层; 2. docker使用的是宿主机的内核,虚拟机需要的Guest OS,所以docker新建一个容器的时候不需要像虚拟机一样加载一个操作系统内核,避免引导性的操作,而docker利用宿主机的操作系统,省略了这个复杂的过程

docker命令自动填补容器名字 docker 容器命令_docker_10

三. docker的常用命令(查看官方文档)

docker命令主要围绕镜像和容器两个核心进行

1. 帮助命令

docker version # 显示docker的版本信息
docker info    # 显示docker的系统信息
dock 命令 --help # 帮助命令

帮助文档地址:https://docs.docker.com/reference/

2. 镜像命令

docker images # 查看所有的镜像
docker images --help # 查看当前命令的具体用法
docker images -q # 只显示镜像的id
docker search 镜像名字 # 搜索镜像

 

docker命令自动填补容器名字 docker 容器命令_docker_11

docker命令自动填补容器名字 docker 容器命令_centos_12

docker命令自动填补容器名字 docker 容器命令_docker命令自动填补容器名字_13

docker search mysql --filter=STARS=4000(使用--filter按照条件过滤)

docker命令自动填补容器名字 docker 容器命令_Docker_14

docker pull 为下载镜像的命令,例如docker pull mysql 表示下载mysql镜像(默认下载最新版的镜像),很多时候我们需要指定下载的版本:docker pull mysql:5.7

docker命令自动填补容器名字 docker 容器命令_Docker_15

docker命令自动填补容器名字 docker 容器命令_docker命令自动填补容器名字_16

删除镜像:docker rmi -f 镜像id(一般通过镜像id删除)

docker命令自动填补容器名字 docker 容器命令_Docker_17

删除多个镜像:docker rmi -f 镜像id 镜像id 镜像id...

删除全部镜像:docker rmi -f $(docker images -aq), docker images -aq查询所有的镜像id,找到之后全部删除:

docker命令自动填补容器名字 docker 容器命令_Docker_18

3. 容器命令

说明:有了镜像才可以创建容器,我们可以下载一个centos进行测试:

docker pull centos

docker命令自动填补容器名字 docker 容器命令_docker_19

新建容器并启动

docker run [可选参数] iamge

 参数说明:

--name="Name" 容器名字, 用来区分容器
-d 后台方式运行
-it 使用交互方式运行
-p 指定容器的端口 有四种使用方式:
        1. -p ip:主机端口:容器端口
        2. -p 主机端口:容器端口 这种方式比较常用
        3. -p 容器端口
        4. 容器端口
-P 随机指定端口

启动并进入容器:-it表示交互,交互的时候需要一个控制台,linux 控制台一般在bin目录,linux一般是bash或者sh命令:我们使用run命令启动了centos,

docker run -it centos /bin/bash

 

docker命令自动填补容器名字 docker 容器命令_docker_20

使用ls命令查看可以发现其实容器里面与容器外面的文件是一样的,容器本身就是一个小型的服务器(容器内就是一个服务器环境):

docker命令自动填补容器名字 docker 容器命令_Docker_21

从容器中退回到主机:exit命令

列出正在运行的容器使用命令:docker ps;列出正在运行的容器 + 历史运行过的容器:docker ps -a;显示最近创建过的容器:docker ps -n=? ;只显示容器的编号:docker ps -q

docker命令自动填补容器名字 docker 容器命令_docker_22

退出容器:① exit 容器直接停止并且退出;② Ctrl + P + Q:容器不停止退出

docker命令自动填补容器名字 docker 容器命令_centos_23

删除容器:① 删除所有的容器:docker rm -f $(docker ps -aq); ② 通过容器id删除某个容器:docker rm 容器id;③ 删除所有的容器:docker ps -a -q | xargs docker rm;注意运行的容器是不可以删除的:

docker命令自动填补容器名字 docker 容器命令_docker_24

docker命令自动填补容器名字 docker 容器命令_docker命令自动填补容器名字_25

启动和停止容器的命令

docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id    # 停止正在运行的容器
docker kill 容器id    # 强制停止当前容器

docker命令自动填补容器名字 docker 容器命令_Docker_26

四. 日志,元数据,进程的查看

后台通过镜像启动容器:docker run -d  镜像名,例如:docker run -d centos ,使用docker ps -a 命令发现centos停止了,常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用就会自动停止,比如使用docker 安装nginx,启动容器后发现自己没有提供服务就会立刻停止,就是没有程序了:

docker命令自动填补容器名字 docker 容器命令_docker_27

查看日志:

docker logs -f -t --tail n 容器id

自己编写一段shell脚本,不断启动在后台启动centos并输出xiaoming,然后使用上面的命令打印10条日志信息,-tf表示输出日志并且带有响应的时间戳,--tail 后面需要加上显示的日志条数:

docker run -d centos /bin/sh -c "while true;do echo xiaoming;sleep 1;done"
docker logs -tf --tail n 容器id

docker命令自动填补容器名字 docker 容器命令_Docker_28

查看容器中的进程信息:top命令

docker top 容器id

docker命令自动填补容器名字 docker 容器命令_Docker_29

查看容器的元数据: inspect 命令

docker inspect 容器id

docker命令自动填补容器名字 docker 容器命令_centos_30

五. 进入当前正在运行的容器 

通常容器都是使用后台方式运行的,有的时候我们需要进入容器修改一些配置,如何进入容器呢?

docker exec -it 容器id /bin/bash 
docker attach 容器id

docker命令自动填补容器名字 docker 容器命令_docker_31

docker exec 与 docker attach 命令区别:

docker exec命令进入容器后开启一个新的终端,可以在里面操作,这个命令会比较常用,docker attach命令进入容器正在执行的终端,不会启动新的进程;

docker命令自动填补容器名字 docker 容器命令_docker命令自动填补容器名字_32

从容器内拷贝文件到主机上

先进入容器新建test.txt,然后拷贝到Centos 7的home目录:

docker cp 容器id:容器路径 主机路径

docker命令自动填补容器名字 docker 容器命令_centos_33

docker命令自动填补容器名字 docker 容器命令_docker命令自动填补容器名字_34