Docker基础知识

可以参考之前的文章Docker基础知识

学会查看帮助

可以先敲docker 用Tab键补齐,可以看到接下来可以使用的

docker载入tar镜像 docker本地加载镜像tar包_运维开发


docker --help可以查看详细的命令参数

docker载入tar镜像 docker本地加载镜像tar包_linux_02


docker images --help,类似这样,哪儿不会了看哪儿

docker载入tar镜像 docker本地加载镜像tar包_docker_03

镜像的拉取/使用

从tar存档或STDIN加载图像,可以直接导入tar打包的镜像,当你自己本地有一个打包好的包时可以使用这个命令导入

docker load -i xxx.tar
-i 从tar存档文件读取,而不是STDIN

docker载入tar镜像 docker本地加载镜像tar包_运维_04


当你本地没有镜像包时,可以从官方仓库拉取/获取镜像(前提搭建docker的主机可以上网)

docker pull 镜像名
例如:
docker pull nginx

docker载入tar镜像 docker本地加载镜像tar包_运维_05


官网拉取有时候会很慢,可以去阿里云、腾讯云之类的搞一个容器镜像加速器(注册就有,免费的,每个人都不一样)

网址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

docker载入tar镜像 docker本地加载镜像tar包_docker载入tar镜像_06


搜索镜像,看官方仓库有没有相关镜像(前提搭建docker的主机可以上网)

docker search 镜像名
例如:
docker search nginx

docker载入tar镜像 docker本地加载镜像tar包_运维开发_07


列出本地主机有哪些镜像

docker images
各个选项说明:
    REPOSITORY:表示镜像的仓库源
    TAG:镜像的标签	#latest表示最新的
    #同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本
    #类似github的概念,可以做版本控制
    IMAGE ID:镜像ID
    CREATED:镜像创建时间
    SIZE:镜像大小

docker载入tar镜像 docker本地加载镜像tar包_docker_08

使用镜像/运行容器

镜像run后就是容器了,因为容器是镜像运行的实例。
其实就是使用某个镜像来运行容器。

docker run 镜像名
参数说明:
    -i: 交互式操作。退出按ctrl+d
    -t: 终端
    -d 指定容器的运行模式
    --name: 指定新的镜像层的名字
    
示例如下:
[root@server5 ~]# docker run -it --name test busybox
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # touch file1
/ # touch file2
/ # touch file3
/ # ls
bin    dev    etc    file1  file2  file3  home   proc   root   sys    tmp    usr    var
/ # [root@server5 ~]#

docker载入tar镜像 docker本地加载镜像tar包_运维开发_09


查看镜像操作历史/查看镜像的分层结构

docker history 镜像名
-q 仅显示数字ID

docker载入tar镜像 docker本地加载镜像tar包_运维_10


下图可以看出,运行的容器是在原来的镜像层上新建了一层,原来的资源是共享的

docker载入tar镜像 docker本地加载镜像tar包_运维_11

创建镜像

有两种方法:

1、docker commit 构建新镜像三部曲

其实就是从已经创建的容器中更新镜像,并且提交这个镜像

1运行容器(上面已经说过,不再赘述):

docker载入tar镜像 docker本地加载镜像tar包_运维_12


2修改容器:

[root@server5 ~]# docker commit  test test:v1
sha256:13074c797fcbb74e4ae859963384151ac66239ac05f6dca66b868b43d2cfd8f3

docker载入tar镜像 docker本地加载镜像tar包_运维开发_13


3将容器保存为新的镜像:

[root@server5 ~]# docker images test:v1

docker载入tar镜像 docker本地加载镜像tar包_docker_14


缺点

效率低、可重复性弱、容易出错。

使用者无法对镜像进行审计,存在安全隐患。

docker载入tar镜像 docker本地加载镜像tar包_docker载入tar镜像_15

2、使用 Dockerfile 指令来创建一个新的镜像

1编写Dockerfile文件

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。这里就涉及到镜像优化的问题,之后的文章会讲。

docker载入tar镜像 docker本地加载镜像tar包_运维_16

[root@server5 ~]# mkdir docker/
[root@server5 ~]# cd docker/
[root@server5 docker]# ls
[root@server5 docker]# vim Dockerfile
# 基于busybox,简单的执行几条指令
FROM busybox
RUN echo hello > testfile

指令作用:
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
RUN:用于执行后面跟着的命令行命令。有以下两种格式:
shell 格式:
RUN <命令行命令>
#<命令行命令> 等同于,在终端操作的 shell 命令。
exec 格式:
RUN [“可执行文件”, “参数1”, “参数2”]
#例如:
#RUN ["./test.php", “dev”, “offline”] 等价于 RUN ./test.php dev offline

2使用build命令创建镜像

docker build 命令用于使用 Dockerfile 创建镜像。
-t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
-f :指定要使用的Dockerfile路径。
[root@server5 docker]# docker build -t test:v2 .
#别忘了指定位置

下图可以看到我们history是会显示做了什么的,也就是弥补了用commit方法创建的缺陷,可以对镜像进行审计。

docker载入tar镜像 docker本地加载镜像tar包_linux_17

容器的使用

列出容器:

docker ps
#默认正在运行的容器
-a 显示全部容器

docker载入tar镜像 docker本地加载镜像tar包_运维开发_18


使用 docker start 启动一个已停止的容器:

docker start 容器id

停止容器:

docker stop <容器 ID>

docker载入tar镜像 docker本地加载镜像tar包_linux_19


进入容器:

在运行容器使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入

docker attach 容器id
docker exec:这个命令退出容器终端,不会导致容器的停止。

docker载入tar镜像 docker本地加载镜像tar包_docker_20


导出容器

导出本地某个容器,可以使用 docker export 命令
docker export 80c0952dee70 > test.tar
#将容器id为80c0952dee70的容器导出为test.tar

docker载入tar镜像 docker本地加载镜像tar包_docker_21


导入容器

使用 docker import 从容器快照文件中再导入为镜像
docker import test.tar test:v1	
#导入test.tar文件为test:v1镜像
也可以通过指定 URL 或者某个目录来导入,例如:
docker import http://example.com/exampleimage.tgz example/imagerepo

docker载入tar镜像 docker本地加载镜像tar包_docker_22

获取容器/镜像的元数据。

docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS说明:
    -f :指定返回值的模板文件。
    -s :显示总的文件大小。
    --type :为指定类型返回JSON。

docker载入tar镜像 docker本地加载镜像tar包_运维开发_23