docker常用命令
虚拟化技术
虚拟机:vmware, virtualbox
从服务器中拿走一些资源,作为自己独立的资源使用
虚拟机的环境是独立的,所以相对容器来说更安全
只能用于测试
容器: docker, vagrant, k8s
资源是融合到服务器中的资源
共享宿主机内核,系统级虚拟化,占用资源少,性能基本接近物理机
可以用在正式环境
Docker核心概念

只读层/读写层: 包含自身id,指向下层的指针,元数据(包含该层的额外信息,能让docker获取运行和构建时的信息),其它数据.
镜像(Image): 是一堆只读层的统一视角,将多个只读层结合在一起.除了最底层,其它层都有一个指针指向下一层,通过统一文件系统技术(UnionFS)将不同层整合成一个可读的统一文件系统.
容器(Container): 是在镜像的最上层添加一层读写层,是一个可读写的统一文件系统
运行容器(Running Container): 在容器的基础上再加上一个隔离的进程空间和包含在其中的进程, 通过进程来对文件进行增删改查, 这些修改作用于容器的读写层
Docker构架

Docker采用C/S架构,客户端和服务器可以运行在同一台服务器上,也可以通过跨主机实现远程通信
Docker客户端(Client): 通过命令行或其它工具来接收用户指令,并且和Docker守护进程通信
Docker主机(Host): 用于执行Docker守护进程和容器的一个物理或者虚拟的机器,通过守护进程来操作容器.
仓库(Repository): 在仓库注册服务器(Registries)下,类似于github,有公共仓库和私人仓库之分,仓库中包含了多个镜像,每个镜像又包含多个标签(tag), 用户可以上传和拉取镜像.
docker常用命令
安装docker
# Ubuntu中安装 sudo apt-get update sudo apt-get install docker-io # CentOS中安装 yum -y install docker-io yum list installe | grep docker
docker启动/重启/关闭
# 启动docker服务 systemctl start docker # 重启docker服务 systemctl restart docker # 关闭docker服务 systemctl stop docker
查看docker信息
# 显示版本 docker -v # 显示Docker版本详细信息 docker version # 显示Docker系统信息 docker info
查看全部镜像
语法: docker images [OPTIONS] [repository] OPTIONS说明: -a 列出本地所有镜像(包含中间映像层) -q 只显示镜像id -f 显示满足条件的镜像 --digests 显示镜像的摘要信息 --format 指定返回值的模板文件 --no-trubc 显示完整的镜像信息 实例: # 查看本地镜像列表 docker images # 只查看镜像id docker images -q # 查看本地ubuntu镜像的全部标签 docker images ubuntu
下载镜像
docker pull 镜像名:标签
例: docker pull ubuntu # 不指定标签默认会下载最新版本
查看镜像的创建历史
docker history 镜像名或镜像id
例: docker history ubuntu01:15.10
保存镜像
docker save -o 文件名 镜像:标签
例: docker save -o my_ubuntu.tar ubuntu:15.10
导入镜像, 导入 使用save导出过的镜像
语法: docker load [OPTIONS] OPTIONS说明: --input, -i 指定导入的文件 --quiet, -q 精简输出信息 实例: # 导入镜像 docker load < busybox.tar.gz # 导入镜像 docker load --input fedora.tar
定义dockerfile文件
文件结构: 1.基础镜像信息 2.维护者信息 3.镜像操作指令 4.容器启动时执行指令 常用指令: FROM 指定基础镜像,必须为第一条指令 MAINTAINER 指定维护者信息 RUN 构建镜像时执行的shell命令 AGR 构建镜像时指定一些参数 ADD 拷贝文件或目录到镜像中 COPY 拷贝文件或目录到镜像中,只能是本地文件,不支持自动下载和解压 WORKDIR 为RUN,CMD,ENTRYPOINT,ADD,COPY设置工作目录 USER 为RUN,CMD,ENTRYPOINT执行shell命令指定运行用户 HEALTHCHECK 告诉docker作为测试容器以检查它是否仍在工作 VOLUME 指定容器挂载点,宿主机自动生成的目录或其他容器 EXPOSE 声明容器运行的服务端口 ENV 设置容器内环境变量 ENTRYPOINT 启动容器时执行的shell命令,不会被docker run命令行指定的参数覆盖 CMD 启动容器时执行的shell命令 注: Dockerfile中每一个指令都会建立一层只读层,当有多个RUN时应该写成一行. 实例: # 创建一个基于ubuntu的新镜像 # 基于ubuntu镜像 FROM ubuntu # 维护人的信息 MAINTAINER muyeyi # 更新镜像中的软件,添加git RUN apt-get update && apt-get -y upgrade && apt-get -y install git # 将主机中index.html文件拷贝到镜像中 ADD index.html /var/www/html/index.html # 当牵动容器时开启80,443端口 EXPOST 80 443 # 当启动容器时执行脚本 CMD ["/run.sh"]
通过dockerfile创建镜像
语法: docker build [OPTIONS] 路径 OPTIONS说明: -f 指定要是用的Dockerfile路径 -t 设置创建的镜像名字和标签
-rm 设置镜像成功后删除中间容器 --network=host 在构建容器期间设置RUN指令的网络模式 实例: # 使用当前目录的Dockerfile创建镜像, 标签为runoob/ubuntu01:1.1 docker build -t runoob/ubuntu01:1.1 . # 通过/path/Dockerfile 创建镜像 docker build -t ubuntu02 -f /path/Dockerfile
创建容器
语法: docker run [OPTIONS] image [COMMAND] OPTIONS说明: -d 后台运行容器,并返回id -i 以交互模式运行容器,通常与-t同时使用 -t 为容器重新分配一个伪输入终端, 通常与-i同时使用 -P(大写)随机端口映射, 容器内部端口随机映射到主机的高端口 -p 指定端口映射, 格式为: 主机端口:容器端口 -v 绑定一个卷, 格式为: 主机内卷路径:容器内卷路径 -e 设置环境变量 --name 为创建的容器指定一个名字 实例: # 使用ubuntu镜像以交互模式启动一个容器, 在容器内执行 /bin/bash命令 docker run --name=ubuntu11 -it ubuntu /bin/bash # 使用ubuntu镜像创建一个名为ubuntu01的容器,并在后台运行容器 docker run --name=ubuntu01 -itd ubuntu 注: docker容器后台运行就必须有个前台进程,不然容器刚创建好就关闭,状态显示为exited. 这是因为容器启动后发现前台没有运行的应用,而无事可干就会自动关闭.
创建一个容器但不启动
docker create --name=新容器名 镜像名或镜像id
例: docker create --name=ubuntu01 ubuntu
查看运行中的容器
语法: docker ps [OPTIONS] OPTIONS说明: -a 显示所有容器 -f 根据条件过滤显示的内容 -l 显示最近创建的容器 -n 显示最近创建的n个容器 -q 只显示容器编号 -s 显示总的文件大小 实例: # 列出运行的容器 docker ps # 列出所有容器的id docker ps -a
在运行的容器中执行中执行命令,操作的对象是容器
语法: docker exec [OPTIONS] 容器名或容器id command OPTIONS说明: -d 分离模式,在后台运行 -i 即使没有附加也保持STDIN打开 -t 分配一个伪终端 实例: # 在ubuntu01容器中开启一个交互模式的终端 docker exec -it ubuntu01 /bin/bash
退出容器
# 退出并关闭容器 exit # 退出但不关闭容器 ctrl+q+p
容器其它命令
# 进入一个运行的容器 docker attach 容器名或容器id # 杀掉一个运行的容器 docker kill 容器名或容器id # 重新启动停止的容器 docker start 容器名或容器id # 停止一个运行中的容器 docker stop 容器名或容器id # 重启容器 docker restart 容器名或容器id # 查看容器中运行的进程信息 docker top 容器名或容器id # 暂停容器中的所有进程 docker pause 容器名或容器id # 恢复容器中的所有进程 docker UNpause 容器名或容器id # 获取容器的日志 docker logs 容器名或容器id # 查看指定容器的端口映射 docker port 容器名或容器id
主机和容器之间的数据拷贝
语法: docker cp 主机中的路径 容器名或容器id:容器路径 docker cp 容器名或容器id:容器路径 主机中的路径 实例: # 将主机中的/www/runoob目录拷贝到ubuntu01容器的/www目录下 docker cp /www/runoob ubuntu01:/www/ # 将主机中的/www/runoob目录拷贝到ubuntu01容器中,目录重命名为www docker cp /www/runoob ubuntu01:/www # 将ubuntu01容器下的/www目录拷贝到主机的/tmp目录中 docker cp ubuntu01:/www /tmp/
将容器转为镜像(即将读写层变为只读层)
语法: docker commit [OPTIONS] container [repository:tag] OPTIONS说明: -a 提交的作者 -m 提交时的说明文字 -c 使用Dockerfile指令来创建镜像 -p 在commit时,将容器暂停 实例: # 将加了git的ubuntu01容器变为一个新的镜像 docker commit -a "muyeyi" -m "add git" ubuntu01 ubuntu_git:v1
删除容器和镜像
docker rm 容器名或容器id docker rmi 镜像名或镜像id # 强制删除 docker rm -f 容器名或容器id docker rmi -f 镜像名或镜像id 注: 删除镜像前要先删除以该镜像为基础的容器
创建mongo容器
docker pull mongo
docker run -itd --name=mongo-test -p 27017:27017 mongo --auth
创建mysql容器
docker pull mysql
docker run -itd --name=mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
创建redis容器
docker pull redis
docker run -itd --name=redis-test -p 6379:6379 redis
仓库
# 登录仓库 docker login 仓库地址(默认为Docker Hub) # 登出仓库 docker logout
标记本地镜像,将其归为某一仓库
docker tag 镜像名:标签 仓库名/镜像名:标签
例: docker tag ubuntu:15.10 runoob/ubuntu:v3
提交镜像,需要先登录到镜像仓库
docker push 镜像名[:tag]
从镜像仓库中查找镜像
语法: docker search [OPTIONS] 镜像的名字 OPTIONS说明: --automated 只列出自动构建类型的镜像 --no-trunc 显示完整的镜像描述 --limit int 列出收藏数不小于指定值的镜像 实例: # 寻找收藏数不小于10的java镜像 docker search limit 10 java # 显示完整收藏数大于10的完整描述的java镜像 docker search --limit 10 --automated java
参考: http://dockone.io/article/783
https://www.runoob.com/docker/docker-architecture.html
https://www.cnblogs.com/edisonchou/p/dockerfile_inside_introduction.html

浙公网安备 33010602011771号