docker基础知识

1、docker常用命令

1.1 帮助命令

操作 指令
查看Docker版本 docker version
查看docker概要信息 docker info
查看docker帮助文档 docker --help

1.2 镜像命令

1.2.1 搜索镜像

官方网站:https://hub.docker.com

  • 搜索镜像命令

    docker search 镜像名称
    

例如:下载centos镜像

docker基础知识_第1张图片

查询结果描述:

  • NAME:镜像名称

  • DESCRIPTION:镜像描述

  • STARS:用户评价,反应一个镜像的受欢迎程度

  • OFFICIAL:是否官方

  • AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

1.2.2 拉取镜像

拉取最新版本命令:

docker pull 镜像

拉取指定版本命令:

docker pull 镜像名称:版本号

1.2.3 查看镜像

查看镜像命令:

docker images

在这里插入图片描述

查询结果描述:

  • REPOSITORY:镜像名称

  • TAG:镜像标签

  • IMAGE ID:镜像id

  • CREATED:镜像的创建日期(不是获取该镜像的日期)

  • SIZE:镜像大小

1.2.4 删除镜像

删除单个镜像命令:

docker rmi -f 镜像id

删除多个镜像命令:

docker rmi -f 镜像名1:TAG 镜像名2:TAG
docker rmi -f 镜像id1 镜像id2

删除全部镜像命令:

docker rmi -f $(docker iamges -qa)

1.3 容器命令

1.3.1 查看容器

查看正在运行的容器命令:

docker ps

查看所有容器命令:

docker ps -a

查看最后一次运行的容器命令:

docker ps -l

查看停止的容器命令:

docker ps -f status=exited

1.3.2 创建与启动容器

创建容器的命令:

docker run

常用的参数说明:有些是一个减号,有些是两个减号

  • –-name=“容器新名字”: 为容器指定一个名称;

  • -d:在run后面加上参数-d,会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i-t两个参数,创建后会自动进入容器),并返回容器ID,也即启动守护式容器;

  • -i:以交互模式运行容器,通常与 -t 同时使用;

  • -t:表示容器启动后会进入其命令行,为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • -e:代表添加环境变量;

  • -p: 表示端口映射,有以下四种格式:

    • ip:hostPort:containerPort

    • ip::containerPort

    • hostPort:containerPort

    • containerPort

    • 前者表示宿主机端口,后者是容器内的映射端口,可以使用多个-p做多个端口映射

启动交互式容器命令:

docker run -it --name=容器名称 镜像名称:标签 /bin/bash

命令执行后直接进入了容器内部,/bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。有些镜像默认的shell环境不是/bin/bash,要看Dockerfile中CMD的值。

退出当前容器命令:

exit

守护式容器创建命令:

docker run -d --name=容器名称 镜像名称:标签

守护式容器含义:能够长期运行、没有交互式会话、适合运行应用程序和服务。

登录守护式容器命令:

docker exec -it 容器名称(或者容器id) /bin/bash

有些镜像默认的shell环境不是/bin/bash,要看Dockerfile中CMD的值。

1.3.3 停止与启动容器

停止容器命令:

docker stop 容器名称或容器id

启动容器命令:

docker start 容器名称或容器id

重启容器命令:

docker restart 容器名称或容器

强制停止容器命令:

docker kill 容器名称或容器id

1.3.4 文件拷贝

将宿主机文件拷贝到容器命令:

docker cp 宿主机需要拷贝的文件或者目录 容器名称:容器目录
例如:
docker cp /tmp/anaconda.log mycentos2:/tmp

将容器文件拷贝到宿主机中命令:

docker cp 容器名称:容器目录或文件 宿主机目录
例如:
docker cp mycentos2:/tmp /export/

1.3.5 目录挂载

可以在创建容器的时候,将宿主机的目录和容器内的目录进行映射,这样就可以通过修改宿主 机的某个目录的文件从而去影响容器。
创建容器添加-v参数,后边为宿主机目录:容器目录,例如:

docker run -di -v /root/data01/:/data01 --name=centos7 centos:7

挂载之后,往宿主机的目录/root/data01中存放文件,在容器centos7的目录/data01下也能看到存放的文件。

如果共享的是多级的目录,可能会出现权限不足的提示,我们需要添加参数–privileged=true来解决挂载的目录没有权限的问题,命令如下:

docker run -di --privileged=true -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos7 centos:7

1.3.6 查看容器ip地址

查看容器ip地址命令:

docker inspect 容器名称或容器id
例如:
docker inspect mycentos3

直接输出IP地址命令:

docker inspect --format={{.NetworkSettings.IPAddress}}’ 容器名称或容器id
例如:
docker inspect --format={{.NetworkSettings.IPAddress}}’ mycentos3

1.3.7 删除容器

删除容器命令:

docker rm 容器名称或容器ID
例如:
docker stop mycentos3  (先停止容器才能)
docker rm mycentos3

1.4 镜像的构建与迁移

1.4.1 Dockerfile

1.4.1.1 介绍

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境;

  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作;

  • 对于运维人员:在部署时,可以实现应用的无缝移植。

1.4.1.2 Dockerfile构建步骤

  1. 编写Dockerfile文件。
  2. docker build。
  3. docker run。

1.4.2 DockerFile 构建过程解析

1.4.2.1 Dockerfile 内容基础知识

  • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数。
  • 指令按照从上到下,顺序执行。
  • #表示注释。
  • 每条指令都会创建一个新的镜像层,并对镜像进行提交。

1.4.2.2 Docker 执行Dockerfile大致流程

  1. docker从基础镜像运行一个容器。
  2. 执行一条指令并对容器作出修改。
  3. 执行类似docker commit的操作提交一个新的镜像层。
  4. docker再基于刚提交的镜像运行一个新容器。
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成。

1.4.2.3 总结

从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段:

  • Dockerfile是软件的原材料。

  • Docker镜像是软件的交付品。

  • Docker容器则可以认为是软件的运行状态。

  • Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

  • Dockerfile:需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;

  • Docker镜像:在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;

  • Docker容器:容器是直接提供服务的。

1.4.3 常用命令

命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程。
MAINTAINER user_name 声明镜像的创建者,创建者的用户名和邮箱地址。
ENV key value 设置环境变量(可以写多条),例如:ENV MYSQL_ROOT_PASSWORD 123456 、ENV JAVA_HOME /usr/local/jdk1.8.0_45。
RUN command 是Dockerfile的核心部分(可以写多条),例如:RUN yum install httpd。
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会自动解压。
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件并不能自动解压。
WORKDIR path_dir 为RUN、CMD、ENTRYPOINT以及COPY和AND设置工作目录,例如:WORKDIR /data。
VOLUME 指定容器挂载点到宿主机自动生成的目录或其他容器,例如:VOLUME [“/var/lib/mysql”]。PS:一般不会在Dockerfile中用到,更常见的还是在docker run的时候指定-v数据卷。
CMD 启动容器时执行的Shell命令,例如:CMD [“-C”, “/start.sh”]、CMD [“/usr/sbin/sshd”, “-D”]、CMD /usr/sbin/sshd -D。
EXPOSE 声明容器运行的服务端口,例如:EXPOSE 80 443 。
ENTRYPOINT 启动容器时执行的Shell命令,同CMD类似,只是由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且这些命令行参数会被当作参数传递给ENTRYPOINT指定指定的程序。
ENTRYPOINT [“/bin/bash”, “-C”, “/start.sh”]、ENTRYPOINT /bin/bash -C ‘/start.sh’。PS:Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效。

1.4.4 使用脚本创建镜像

1.4.4.1 编写Dockerfile

  • 创建目录
mkdir -p /export/docker/jdk8
  • 将jdk-8u241-linux-x64.tar.gz上传到服务器(虚拟机)中的/export/docker/jdk8目录
  • 创建文件Dockerfile
cd /export/docker/jdk8/
vi Dockerfile
#依赖镜像名称和id
FROM centos:latet
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
ENV PATH $JAVA_HOME/bin:$PATH

1.4.4.2 构建镜像

docker build -t jdk1.8:1.8 .

注意后面的空格和点,不要省略,点表示当前目录,如果当前目录下没有Dockerfile,那么就把点替换成Dockerfile的目录位置。jdk1.8:1.8,冒号前面是镜像名称,后面是镜像的标签。如果没有标签,默认标签为latest。

1.4.5 Docker 迁移与备份

1.4.5.1 容器保存为镜像

  • 通过以下命令将容器保存为镜像
docker commit 容器名 镜像名

镜像名后面不加冒号和标签,默认标签就是latest。加了就是指定的标签值。

1.4.5.2 镜像备份

  • 通过以下命令将镜像保存为tar文件
docker save -o xxxx.tar 镜像
-o:表示output,输出的意思 
例如:
sudo docker save -o jdk12.tar jdk12:12

会在当前目录下生成xxxx.tar包。

1.4.5.3 镜像恢复与导入

  • 使用此命令进行恢复镜像
docker load -i xxxx.tar
-i:表示输入的文件,执行后再次查看镜像,可以看到镜像已经恢复

使用docker load -i 命令之后,镜像的名字和标签都是none,这个问题的根本在于这个镜像压缩包在打包的时候操作不当所导致。例如使用镜像ID打包的话导致解压的出来的镜像没有名字。因此,推荐使用镜像的名字进行打包。

如果镜像的名字和标签为空,可以使用以下命令重命名:

docker tag [镜像id] [新镜像名称]:[新镜像标签]

你可能感兴趣的:(docker,docker,容器,运维)