docker入门手册

目录

1. docker基础

1. 1 docker介绍

1.2 docker架构与核心组件

1.3 docker安装和卸载

安装

卸载

docker加速器设置 -> 可选

1.4 权限问题

1.5 docker服务相关操作命令

2. docker镜像管理

2.1 镜像的搜索/获取/查看

镜像搜索

2.2 镜像别名/删除

2.3 镜像的导入导出

2.4 镜像的历史和详细信息

2.6 总结

3. docker容器管理

3.1 容器的查看/创建/启动

3.2 容器的暂停/重启

3.3 容器的关闭/终止/删除

3.4 容器的进入/退出

3.5 容器的日志/信息/端口/重命名

3.6 基于容器的镜像导入导出

3.6 总结


1. docker基础

1. 1 docker介绍

  • docker是什么 ?

    Docker 是一个开源的应用容器引擎,是直接运行在宿主操作系统之上的一个容器,使用沙箱机制完全虚拟出一个完整的操作,容器之间不会有任何接口,从而让容器与宿主机之间、容器与容器之间隔离的更加彻底。每个容器会有自己的权限管理,独立的网络与存储栈,及自己的资源管理能,使同一台宿主机上可以友好的共存多个容器。

  • docker与虚拟机对比

    如果物理机是一幢住宅楼,虚拟机就是大楼中的一个个套间,而容器技术就是套间里的一个个隔断。

    • 虚拟化技术不同

      • VMware Workstation、VirtualBoX

        硬件辅助虚拟化:(Hardware-assisted Virtualization)是指通过硬件辅助支持模拟运行环境,使客户机操作系统可以独立运行,实现完全虚拟化的功能。

      • Docker

        操作系统层虚拟化:(OS-level virtualization)这种技术将操作系统内核虚拟化,可以允许使用者空间软件实例被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称为是一个容器(containers)、虚拟引擎(Virtualization engine)、虚拟专用服务器(virtual private servers)。每个容器的进程是独立的,对于使用者来说,就像是在使用自己的专用服务器。

      以上两种虚拟化技术都属于软件虚拟化,在现有的物理平台上实现对物理平台访问的截获和模拟。在软件虚拟化技术中,有些技术不需要硬件支持;而有些软件虚拟化技术,则依赖硬件支持。

    • 应用场景不同

      • 虚拟机更擅长于彻底隔离整个运行环境。如: 云服务提供商通常采用虚拟机技术隔离不同的用户。

      • Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

    • 资源的使用率不同

      虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。

  • docker的版本

    • Docker-CE -> 社区版

      • Stable 版

        • 稳定版

        • 一个季度更新一次

      • Edge 版

        • 非稳定版

        • 一个月更新一次

    • Docker-EE

      • 收费的, 企业版

1.2 docker架构与核心组件

  • docker架构

    • 客户端

      • linux终端, 用来操作docker指令

    • docker服务器

      • 守护进程 -> 有一个应用程序, 没有操作终端

        • 不能和用户进行交互

          • 输入

          • 输出

        • 在后台周期性的执行某些操作

      • 管理docker容器和docker镜像

    • docker镜像

      • 一些操作系统磁盘文件

      • nginx镜像

        • 有一个操作系统, 上边安装了nginx

      • ubuntu镜像

      • redis镜像

      • 用户可以自己制作, 也可以从官方下载

    • docker容器

      • 通过docker操作命令可以磁盘上的docker镜像启动, 启动之后就是docker容器

        • 容器中运行的是一个操作系统

    • 镜像仓库

      • docker hub -> 官方提供的镜像仓库

1.3 docker安装和卸载

安装
# 1. 安装基本软件
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y
# 2. apt仓库添加并阿里云的docker软件包
# 把下载的key添加到本地trusted数据库中。
$ sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 3. 升级软件源
$ sudo apt-get update
# 4. 安装docker
$ sudo apt-get install docker-ce -y
# 5. 测试docker
$ docker version
卸载
# 卸载软件
sudo apt-get purge docker-ce 
	- 删除对用的信息文件+应用程序
sudo apt-get remove docker-ce 
	- 只删除应用程序
	
# 删除目录
/etc/docker -> 身份认证目录
/var/lib/docker -> 存储镜像的

$ sudo rm /etc/docker /var/lib/docker -r
docker加速器设置 -> 可选
# docker安装完成之后, 启动docker容器需要镜像, 镜像需要从官方下载, 可以通过配置加速器, 提高下载速度

# 访问 https://dashboard.daocloud.io 网站,登录 daocloud 账户
# 提交下载镜像的速度
# 打开加速页面, 拷贝下边的命令到linux终端, 执行
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 可以去 /etc/docker/daemon.json
这个文件中添加了一句话:
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
# 重启docker服务
sudo systemctl restart docker

1.4 权限问题

$ docker version
Client:
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:49:01 2018
 OS/Arch:           linux/amd64
 Experimental:      false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/version: dial unix /var/run/docker.sock: connect: `permission denied`

# 解决方案1 -> 在指令前添加sudo
sudo docker version

# 解决方案2 -> 只需要设置一次, 以后就都OK了
# 将当前用户, 添加到docker组中
# 检测docker组是否存在
/etc/group, 在这个文件中搜索 docker 关键字
# 将当前用户添加到docker组中
sudo gpasswd -a 当前用户 要添加到的组
sudo gpasswd -a go docker
# 如果不行, 执行下边的命令, 进行组的切换
newgrp - docker
# 重启docker服务器服务
sudo systemctl restart docker

# 解决方案3 -> 电脑重启一次需要设置一次
修改/var/run目录下的docker.sock文件权限
sudo chmod 666 docker.sock 

1.5 docker服务相关操作命令

# 启动
sudo systemctl start docker
# 关闭
sudo systemctl stop docker
# 重启
sudo systemctl restart docker
# 查看状态
sudo systemctl status docker

2. docker镜像管理

2.1 镜像的搜索/获取/查看

  • 镜像搜索
    # 查看docker中的所有指令
    docker --help
    # 命令
    $ docker search 镜像名
    # 字段关键字
    NAME: 镜像的名字
    DESCRIPTION: 镜像的描述                                    
    STARS: 镜像的下载量            
    OFFICIAL: 是不是官方的出品的镜像           
    AUTOMATED: 会不会启动一些脚本之类的程序
  • 获取镜像

    # 下载远程仓库(如Docker Hub)中的镜像
    $ docker pull 镜像名(search时得到的name字段)
    # 下载完成之后, 就存储到了本地的镜像仓库 -> 本地目录
    /var/lib/docker
    
    # 重置root用户密码
    sudo passwd root
  • 查看镜像

    # 命令
    # 查看所有的镜像
    $ docker images
    $ docker image ls
    # 查看某个镜像
    $ docker images 镜像名
    $ docker image ls 镜像名字
    # 字段关键字
    REPOSITORY: 镜像的名字
    TAG: 镜像的版本
    IMAGE ID: 镜像ID(==身份证号, 是唯一的)
    CREATED: 创建时间
    SIZE: 镜像的大小
    # 细节
    通常在描述一个镜像的时候:
    	镜像名:tag -> nginx:latest
    	如果tag的值为latest, 那么latest可以省略不写
    	nginx == nginx:latest

2.2 镜像别名/删除

  • 镜像别名

    $ docker tag 现在的名字:tag 别名:tag
    # 不同的名字对应的镜像ID相同
    # 镜像并没有复制, 只是多了一个名字
  • 删除镜像

    docker rmi [OPTIONS] IMAGE [IMAGE...]
    	- IMAGE: 镜像名/镜像ID
    # 如果镜像有别名, 只能够安照 镜像名:tag 进行删除, 不能根据ID进行删除
    # 如果镜像有多个名字, 删除任意一个名字, 名字会删除, 镜像还在
    # 当镜像只剩下一个名字的时候, 对其进行删除, 镜像就被删除了

2.3 镜像的导入导出

  • 镜像导出 -> 镜像备份和分发

    # 将本地仓库中的镜像导出的磁盘目录
    docker save [OPTIONS] IMAGE [IMAGE...]
    	OPTIONS:
    		-o, --output string   Write to a file, instead of STDOUT
    docker save -o 导出之后镜像名字(自己起名) 镜像名
    	IMAGE: 要导出的镜像
  • 镜像导入

    # 将外部镜像, 导入到本地的镜像仓库中
    docker load [OPTIONS]
    	OPTIONS:
    		-i, --input string 
    docker load -i 镜像文件的名字
    $ docker load < 镜像文件的名字

2.4 镜像的历史和详细信息

  • 查看镜像的历史信息

    # 制作镜像的时候的操作步骤
    docker history
  • 查看镜像的详细信息

    # 镜像的属性信息, 以json格式输出的
    # https://yq.aliyun.com/articles/230067
    docker inspect 镜像名/镜像ID

2.6 总结

3. docker容器管理

docker将镜像文件启动, 得到一个容器, 一个容器可以被看做一个操作系统

3.1 容器的查看/创建/启动

  • 容器查看

    # 命令, 只能看到正在运行的容器的状态
    # 启动的每个容器都是一个进程
    docker ps
    # 相关的头介绍
    CONTAINER ID: 容器启动之后的ID, 是唯一的
    IMAGE: 当前容器是基于那个镜像启动的
    COMMAND: 容器启动之后, 默认执行了什么命令
    CREATED: 容器的创建时间
    STATUS: 容器当前状态, 
    	created: 容器被创建, 但是不能使用
    	runing: 运行状态
    	pause: 暂停状态
    	exited: 容终止运行, 但是容器还在
    PORTS: 映射的端口, 主机和容器直接的端口映射
    NAMES: 容器启动之后的名字, 如果没有指定, 会随机生成一个, 这个名字不能重复
    参数:
      -a, --all: 显示所有容器, 默认只显示running状态的
      -q, --quiet: 只显示容器ID
  • 容器创建

    # 容器被创建, 但是还不能使用, 需要启动
    $ docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    	OPTIONS:
    		-a, --attach list   给容器关联 STDIN, STDOUT or STDERR
    		-t, --tty: 给容器绑定终端
    		-i, --interactive: 关联标准输入
    		--rm: 容器终止运行的时候, 自动被删除
    		--name string: 手动指定容器的名字
    	IMAGE: 基于哪个镜像启动容器
    	COMMAND: 可以不写, 或许写个bash
    	ARG...: shell命令的参数
  • 容器启动

    • 启动创建的容器

      $ docker start [OPTIONS] CONTAINER [CONTAINER...]
      	OPTIONS:
      		-a, --attach               Attach STDOUT/STDERR and forward signals
        		-i, --interactive          Attach container's STDIN
        	CONTAINER: 容器名或者容器ID
    • 创建新容器并启动

      # 通过一个命令创建容器, 并且启动
      # docker run == docker create + docker start
      docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
      docker run    [OPTIONS] IMAGE [COMMAND] [ARG...]
      	OPTIONS: 
      		-d, --detach: 以守护进程的形式运行
      		-a, --attach list   给容器关联 STDIN, STDOUT or STDERR
      		-t, --tty: 给容器绑定终端
      		-i, --interactive: 关联标准输入
      		--rm: 容器终止运行的时候, 自动被删除
      		--name string: 手动指定容器的名字

3.2 容器的暂停/重启

  • 暂停

    docker pause CONTAINER [CONTAINER...]
  • 取消暂停

    docker unpause CONTAINER [CONTAINER...]
  • 重启

    docker restart [OPTIONS] CONTAINER [CONTAINER...]
        Options:
          -t, --time int: 延时时间, 默认10s

3.3 容器的关闭/终止/删除

  • 关闭

    # 从running -> exited 状态, 容器还在, 有延时
    docker stop [OPTIONS] CONTAINER [CONTAINER...]
        Options:
          -t, --time int: 延时时间, 默认10s
  • 终止

    # 从running -> exited 状态, 容器还在, 直接关闭, 没有延时
    docker kill [OPTIONS] CONTAINER [CONTAINER...]
        Options:
          -s, --signal string: 指定发出的信号, 一般不用
  • 删除

    • 删除未运行的容器 -> 状态 非 running(up)

      docker rm 容器名/容器ID
    • 删除运行的容器

      docker rm 容器名/容器ID -f
      	-f: 强制删除容器

    • 批量删除容器 

      docker rm $(docker ps -aq) -f
      docker rm `docker ps -aq` -f

3.4 容器的进入/退出

  • 进入容器

    • 创建并进入 - 使用频率低

      docker run    [OPTIONS] IMAGE [COMMAND] [ARG...]
      $ docker run -it --rm --name myxx ubuntu bash
    • 手动进入

      # 创建并启动容器
      $ docker run -itd --rm --name myxx ubuntu bash
      # 手动进入容器中
      docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
      	OPTIONS:
      		-i, --interactive          Keep STDIN open even if not attached
        		-t, --tty                  Allocate a pseudo-TTY
        	CONTAINER: 容器名字/容器ID
        	COMMAND: shell指令 -> bash
        	[ARG...]: shell命令的参数

  • 退出容器

    # 第一种方式
    在终端输入: exit
    # 第二种方式: ctrl+D

3.5 容器的日志/信息/端口/重命名

  • 查看容器的日志信息

    # 容器运行一段时间之后, 会生成log日志, 如果没有生成, 是看不到的
    docker logs 容器名/容器ID
  • 查看容器的详细信息

    # https://yq.aliyun.com/articles/230067
    # 查看镜像的详细信息
    docker inspect 容器名/容器ID
  • 查看容器的端口信息

    # 查看本机和容器的端口映射
    docker port 容器名/容器ID
  • 容器重命名

    docker rename CONTAINER NEW_NAME

3.6 基于容器的镜像导入导出

镜像的导出

docker export [OPTIONS] CONTAINER
	Options:
  		-o, --output string: 导出的镜像文件的名字
  		
docker export 容器名/容器ID > 导出的镜像的名字(自己起)

镜像的导入 -> 导入到本地的镜像仓库中

docker import
cat 要导入的镜像文件 | docker import - 新的镜像名:tag

对比

save 和 export
	- 使用save导出镜像, 不能对镜像进行修改
	- export通过容器导出, 原始镜像可以通过启动容器进行修改
	- 通过export导出镜像, 会丢失镜像的历史记录
	   如果没有通过容器对进行做任何修改, export导出的镜像小
load 和 import
	- 都是将导出的镜像导入到本地镜像仓库
	- 如果使用load进行导入: 镜像名无法修改
	- import导入镜像: 镜像名是可以修改的

3.6 总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值