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

posted @ 2020-01-07 21:40  muyeyi  阅读(217)  评论(0)    收藏  举报