docker ps //查看当前运行中的容器

docker ps -a //查看所有运行过的容器

docker inspect containerId(容器ID或容器名)//查看对应容器的具体配置信息

docker port containerId //查看对应容器端口映射

docker run --name containerName -it -p 80:80 -d // --name是为容器取一个别名,-p 80:80是端口映射,将宿主机的80端口映射到容器的80端口上,-d是指后台运行容器,即容器启动后不会停止,-it是-i 和-t的合并,以交互模式运行容器。(-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开)

docker images //查看所有镜像

docker exec -it containerName /bin/bash //进入已启动的容器内,新启一个进程,执行命令。

docker stop containerName // 停止一个容器

docker start -i containerName //重启启动一个运行过的容器

docker rm containerName //移除一个容器
 

 

 

docker ps // 查看当前正在运行的容器

docker ps -a // 查看已关闭的容器列表

docker ps -l // 查看最近启动的容器信息

docker images (docker images ls 默认是列出顶级镜像列表)// 列出本地主机上的镜像列表

docker image ls -a //查看所有镜像(包括中间层镜像)

docker pull //下载指定的镜像

docker search // 查找镜像,从dockerHub上查找需要下载的镜像

docker port  //查看端口的绑定情况

 

构建docker镜像需要创建Dockerfile文件

docker build -t "镜像名" . // t代表创建指定的目标镜像名 .代表当前Dockerfile文件目录

 

docker tag "镜像id" "镜像名" : "新的标签名" //为镜像添加一个新的标签(local,dev, proc)

 

docker run  -d -P (-p)  //启动一个应用容器 (-d 表示让container 运行在后台, -P :是容器内部端口随机映射到主机的高端口。-p : 是容器内部端口绑定到指定的主机端口)。

 


sudo docker run -i -t ubuntu /bin/bash //


(/bin/bash表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器就会退出。


这个就表示启动容器后启动bash。)

 

docker 镜像(image)和容器(container)的关系相当与java中的类与实例的关系一样,容器的实质是进程,但与直接在宿主执行的进程有所不同

容器进程运行于自己独立的命名空间(命名空间Linux内核的一项功能,它对内核资源进行分区,使得一组进程看到一组资源,

而另一组进程看到一组不同的资源).

 

docker-registry:镜像构建完成后,可以很容易在当前的宿主机上运行,如果需要在其他服务器上使用该镜像,则需要一个集中的存储丶分发镜像的服务.

docker-registry公开服务:是开放给用户使用,允许用户管理镜像的registry服务.(docker-hub是官方的公开服务)

一个docker-registry中可以包含多了仓库(repository);每个仓库包含多个标签(tag),每个标签对应一个镜像

 

linux命令中的反斜线符号“ \ ”在Bash中被解释为转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值,除了换行符,

比如:docker run -it --rm \

              ubuntu:18.04 \

              bash

 

查看当前linux操作系统的的版本命令:cat /etc/os-release

 

docker run -it ubuntu:18.04 bash(it是-i和-t的结合体,-i(interaction交互)表示交互式操作,-t(terminal)代表终端)

docker run -t -i ubuntu:18.04 /bin/bash(-t代表docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开)

 

虚悬镜像(dangling image):新旧镜像同名,旧镜像名称被取消,会出现仓库名和标签都为none的镜像称为虚悬镜像.

 

删除镜像: docker image rm

 

为了加快镜像的构建,重复利用资源,docker会利用中间层镜像.上层镜像依赖于中间镜像,所以不可删除中间镜像.会导致上层镜像的依赖关系出错

 

查看指定的镜像列表:docker image ls ubuntu //根据仓库名列出镜像

docker image ls ubuntu:18.04 //根据仓库名和标签列出镜像

docker image ls命令还包含过滤的功能(--filter),简写-f,比如查询仓库名为ubuntu之后建立的镜像列表.

docker image ls -f since=ubuntu:18.04 //查看镜像ubuntu18.04之后的镜像列表

docker image ls -f before=ubuntu18.04 //查看镜像ubuntu18.04之前的镜像列表

docker image ls -q //列出所有顶层镜像的id,也可配合-f来检索指定范围的id列表

docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" //自定义格式输出镜像列表

 

 

镜像的唯一标识是id和摘要,一个镜像可以有多个标签,镜像是容器的基础,每次执行docker run 的时候都会指定哪个镜像作为容器运行的基础,当从公共服务(docker register)中无法获取自己需要的镜像时,此时需要定制这些镜像.

 

容器 = 镜像 + 可读可写层(也就是容器的存储层)

 

启动一个web应用时:docker run --name mywebserver -d -p 80:80 nginx // --name 自定义容器的名称 -d (daemon后台程序)使容器在后台运行, -p指定映射端口(也就是容器的内部端口和宿主端口进行绑定)

 

使用docker exec命令可进入容器,修改内容.

docker exec -it webserver bash

 

可通过docker diff + 容器名来查看容器的变更记录

对容器进行了修改后,如果想将其改动保存下来形成镜像,我们需要使用docker commit命令(docker commit 命令慎用,会有很多的黑箱操作无法显示出来)

docker commit \

    --author "xiao feifei <837698719@qq.com>" \     =>指定修改的作者

    --message "修改了默认的访问网页内容" \   =>记录本次修改的内容

    mynginx \

    nginx: v2

 

docker history + 容器的名称 + 标签名 //查看镜像内的历史记录

 

使用Dockerfile定制镜像

镜像的定制实际上就是定制每一层所添加的配置,文件.Dockerfile文件一行指令构建一层.

Dockerfile文件内容实例如下:

FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

 

(1)FROM指定基础镜像,定制镜像是在以一个镜像为基础上对其进行定制.

(2)RUN指令是用来执行命令行命令的,其格式分为两种:

      (1)shell格式:RUN <命令>

          (2)exec格式:RUN ["可执行文件", "参数1", "参数2"] 比如:RUN apt-get update

使用docker build命令来构建镜像:

docker build [选项] <上下文路径/URL/->

ps:docker build -t nginx:v3 . // -t 代表--tag list 表示构建的镜像的名称和标签名(可选的)

//.代表上下文路径,并非是Dockerfile文件所在的路径

 

镜像构建上下文

docker build的工作原理:Docker在运行时分为Docker引擎(也就是服务器的守护进程)和客户端工具,Docker引擎提供了一组REST API,称为Docker remote api, 对于docker build命令这样的客户端工具,则是通过这组api和docker引擎进行交互的,从而完成各种功能.

 

Dockerfile文件详解:

(3) COPY <源路径>... <目标路径>(官方建议使用该命令)

copy指令将从构建上下文目录中也就是<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>的位置.(目标路径可以是相对于工作目录的绝对路径也可以是相对路径)

(4) ADD是COPY的加强版(不建议使用,适用于自动解压.zip,tar,xz等压缩文件)

 

(5) CMD容器启动命令: CMD <命令> ps: CMD echo $HOME

 容器就是进程,启动时需要指定所运行的程序及参数,cmd命令就是用于指定默认的容器主进程的启动命令的.ubuntu镜像默认的CMD是 /bin/bash.

 

 

操作容器:

docker container start //启动一个容器

docker container logs //查看容器的日志

docker container stop  //终止容器

docker container restart // 重启容器

docker container rm  //删除容器

docker container prune //清空所有处于终止状态的容器

使用-d参数,容器启动后会进入后台

某些时候需要进入容器进行操作,可使用docker attach(进入容器后,使用exit会导致容器停止) 或 docker exec命令,推荐使用docker exec

 

导入导出容器:

导出容器:docker export 7691a814370e > ubuntu.tar

导入容器:cat ubuntu.tar | docker import(load) - test/ubuntu:v1.0(也可以url形式导入)

 

访问仓库(repository):

Docker Register(注册服务器)是管理仓库(repository)的具体服务器,每个服务器上有多个仓库,每个仓库上有多个镜像.可以认为仓库是一个具体的项目或者目录.ps:dl.dockerpool.com/ubuntu是仓库地址,dl.dockerpool.com是注册服务器地址

docker login //登录Docker Hub

docker logout //退出登录

docker search //查找官方仓库的镜像

docker pull //拉取镜像到本地