基础命令
-
基础概念
虚拟机
- 资源占用多
- 启动慢
linux容器
linux容器不是模拟一个完整的操作系统,而是对进程进行隔离
启动快,资源占用少,体积小
docker
docker是linux容器的一种封装,提供简单易用的容器使用接口
原理:Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样
用途:提供一次性的环境,提供弹性的云服务,组建微服务架构
docker info 查看信息
docker version 查看版本
-
镜像(操作系统包)
-
概念
镜像是一种虚拟的概念,实际并非由一个文件组成,而是由一组文件系统组成(多层文件系统联合组成)
镜像构建时,会一层层构建,前一层是后一层的基础,每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层,类似于git(提交)
-
列出镜像列表
docker images / docker image ls -a
-
拉取镜像
docker pull centos
-
查找镜像
docker search centos
-
删除镜像
docker rmi d52bdbc72669(images ID)
-
更新镜像
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2 -m: 提交的描述信息 -a: 指定镜像作者 e218edb10161:容器 ID runoob/ubuntu:v2: 指定要创建的目标镜像名
-
构建镜像
使用dockerfile去构建镜像 docker build -t runoob/centos:6.7 . -t :指定要创建的目标镜像名 . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
-
设置镜像标签
docker tag 860c279d2fec runoob/centos:dev docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。
-
推送镜像
docker tag ubuntu:18.04 username/ubuntu:18.04 docker push username/ubuntu:18.04 docker search username/ubuntu:18.04
-
查看镜像、容器、数据卷所占用的空间。
docker system df docker diff containername //查看容器存储层改动
-
虚悬镜像
docker image prune //删除虚悬镜像 docker image ls -f dangling=true //查找虚悬镜像
-
查看镜像内的历史记录
docker history imagename
-
-
容器(操作系统的一个实例)
- 容器
image 文件生成的容器实例,本身也是一个文件,称为容器文件
一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已
每一个容器运行时,是以镜像为基础,在其上创建一个当前容器的存储层(容器存储层)
-
启动容器
docker run -itd -rm -P --restart=always ubuntu:15.10 /bin/bash
-i: 交互式操作。
-t: 终端。
-d: 后台运行
-P 端口随机映射本地
-p 容器内部端口绑定到指定的主机端口
-rm 这个参数是说容器退出后随之将其删除
--restart具体参数值详细信息:
no // 默认策略,容器退出时不重启容器;
on-failure // 在容器非正常退出时(退出状态非0)才重新启动容器;
on-failure:3 // 在容器非正常退出时重启容器,最多重启3次;
always // 无论退出状态是如何,都重启容器;
unless-stopped // 在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。
ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。 -
启动已停止运行容器
docker ps -a
-
启动,关闭,重启容器
docker stop 容器ID
docker start 容器ID
docker restart 容器ID -
进入容器
attach
exec 推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止
docker exec -it dev-redis /bin/bash -
导入导出容器
导出容器
docker export 1e560fca3906 > ubuntu.tar
导入容器快照
docker import http://example.com/exampleimage.tgz example/imagerepo -
删除容器
docker rm -f 容器ID
-f: 强制
清理所有停止的容器
docker container prune -
查看容器端口
docker port 容器ID
-
查看容器进程
docker top 容器ID
-
查看容器日志
docker logs -f 容器ID
-
容器自启动
docker update --restart=always <containerName>
-
容器互联
新建网络
docker network create -d bridge dev-net
-d: 参数指定 Docker 网络类型,有 bridge、overlay。
运行一个容器加入网络中
docker run -itd --name test1 --network dev-net ubuntu /bin/bash -
列出本机所有容器,包括终止的容器
docker container ls --all
-
Dockerfile
-
FROM 和RUN
FROM 基于什么镜像 RUN 用于执行后面跟着命令行命令 <!--例如--> FROM centos RUN yum -y install wget \ && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \ && tar -xvf redis.tar.gz
-
COPY
COPY 从上下文目录中复制文件或目录到容器指定位置 <!--例如--> COPY hom* /mydir/ COPY hom?.txt /mydir/
-
ENTRYPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖 ENTRYPOINT ["nginx", "-c"] # 定参 CMD ["/etc/nginx/nginx.conf"] # 变参
-
ENV
设置环境变量 ENV NODE_VERSION 7.2.0
-
VOLUME
定义匿名数据卷 避免重要数据 避免容器不断变大 VOLUME <路径> -v 参数修改挂载点
-
WORKDIR
WORKDIR <工作目录路径>
-
LABEL
LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式,语法格式如下:xxxxxxxxxx LABEL org.opencontainers.image.authors="runoob"
-
-
数据卷(volume)
数据卷是一个多个容器使用的特殊目录
- 数据卷可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新,不会影响镜像
- 数据卷默认会一直存在,即使容器被删除
-
创建数据卷
docker volume create my-col
-
查看数据卷
docker volume ls
-
查看指定数据卷的信息
docker volume inspect my-col 查看容器的信息 docker inspect containername
-
创建一个容器,并加载一个数据卷到指定目录
$ docker run -d -P \ --name web \ # -v my-vol:/usr/share/nginx/html \ --mount source=my-vol,target=/usr/share/nginx/html \ nginx:alpine
-
挂载一个主机目录作为数据卷
使用--mount 标记可以指定挂在一个本地主机的目录到容器中 $ docker run -d -P \ --name web \ # -v /src/webapp:/usr/share/nginx/html \ --mount type=bind,source=/src/webapp,target=/usr/share/nginx/html \ nginx:alpine -v 参数时如果本地目录不存在 Docker 会自动为你创建一个文件夹,现在使用 --mount 参数时如果本地目录不存在,Docker 会报错
-
删除数据卷
docker volume rm my-vol // 无主的数据卷删除 docker volume prune