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 //拉取镜像到本地