一、什么是docker
1)docker是linux容器的封装。
2)docker运行首先要生成镜像文件image,镜像文件包含了程序,和程序运行所依赖的各种资源。
3)image文件都是继承其它image文件然后自己往里面添加一些内容形成自己的image文件。
4)通过image也就是镜像可以生成容器文件,dokcer每次运行run命令都可以创建一个容器文件。
二、docker基本命令使用
1.从镜像仓库拉去docker镜像
docker image pull library/hello-world
2.查看本机有哪些镜像文件
docker image ls
3.列出本机所有容器,包括终止运行的容器
docker container ls --all
列出本机正在运行的容器
docker ps | docker container ls
4.会从 image 文件,生成一个正在运行的容器实例,
docker run -itd ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
-d: 在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式
--name 指定容器的名称
--network 指定容器链接的网络
-P:将容器内部使用的网络端口随机映射到我们使用的主机上
-p:可以手动设置容器内部网络端口和主机端口的映射如:docker run -d -p 5000:5000 training/webapp python app.py
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker image pull命令并不是必需的步骤。
5.在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach 使用此命令对出后会导致容器停止
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
7.容器后端启动后不会直接进入到容器,使用exec可以进入容器并且跟容器中的终端进行交互
docker exec -it 243c32535da7 /bin/bash
8.使用 docker start 启动一个已停止的容器
docker start b750bbbcfd88
9.不会自动终止的容器手动终止
docker container kill [containID]
10.停止容器的命令如下
docker stop <容器 ID>
11.停止的容器可以通过 docker restart 重启
docker restart <容器 ID>
12.列出本机正在运行的容器
docker container ls 或 docker ps
13.列出本机所有容器,包括终止运行的容器
docker container ls [--all | -a]
docker ps [--all | -a]
14.删除docker容器
docker rm
运行上面的命令之后,再使用docker container ls --all命令,就会发现被删除的容器文件已经消失了。
15下面的命令可以清理掉所有处于终止状态的容器。
$ docker container prune
16.在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
docker logs [containerId|containerName]
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
17.导出容器
docker export 1e560fca3906 > ubuntu.tar
18.可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
也可以通过指定 URL 或者某个目录来导入,例如:
docker import http://example.com/exampleimage.tgz example/imagerepo
19.使用 docker top 来查看容器内部运行的进程
docker top wizardly_chandrasekhar
20.使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息
docker inspect wizardly_chandrasekhar
21.docker network create -d bridge test-net
docker容器新建网路桥接
参数说明:
-d:参数指定 Docker 网络类型,有 bridge、coverlay
22.生成新的镜像
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2: 指定要创建的目标镜像名
docker tag 860c279d2fec runoob/centos:dev
docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)
docker build -t nginx:v3 .
根据Dockerfile文件创建镜像,指令最后一个 . 是上下文路径
23.推送镜像
docker push username/ubuntu:18.04
需要先登录,把本地镜像推送到镜像仓库中
24.docker容器数据持久化
1.bind mounts:方式将宿主机任意位置的文件夹挂在到容器中
docker run --name web -d -v C:\Users\EDY\docker:/usr/share/nginx/html -p 88:80 nginx:v3
2.volumes: 文件卷,docker 管理宿主机文件系统的一部分
docker volumes create nginx-vol 创建docker文件卷
docker run --name web -d -v nginx-vol:/usr/share/nginx/html -p 88:80 nginx:v3
三、创建镜像
创建镜像的方式有三种分别是1.通过dockerfile创建容器;2.通过commit命令根据容器生成一个新的镜像;3.通过导入导出的方式生成新的镜像,接下来我会详细讲一下通过dockerfile和commit命令的方式创建容器。
1.通过dockerfile创建镜像
参考:
dockerfile文件详解
cmd 与 entrypoint的区别
2.通过commit方式创建镜像
通过commit方式创建镜像主要是基于容器,使用场景是,对一个容器进行改造,比如在centos镜像中通过二进制的方式下载了一个nginx并且对nginx进行了配置,如果想要把这个容器作为一个基础镜像模板可以使用commit命令根据容器生成一个新的镜像并且可以把新的镜像推送到镜像仓库中。
例:
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2: 指定要创建的目标镜像名