Docker使用教程

2021-04-01 09:49:49 浏览数 (1)

Docker是什么

Docker是一种容器技术,通过Docker你可以做到:

  1. 更快速的交付和部署
  2. 更高效的虚拟化
  3. 更轻松的迁移和扩展
  4. 更简单的管理(类似git)

下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

Docker的3个重要的概念

Docker 包括三个基本概念

  1. 镜像(Image)
  2. 容器(Container)
  3. 仓库(Repository)

镜像是分层存储的

类似Git,一个文件对此修改,之后的修改是对上次修改的补丁,一层层的覆盖。

镜像也一样,它不像ISO那样的打包文件,由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

注意:容器中的数据非持久的,容器的生命周期结束了, 容器中的文件也就没有了,所以容器运行时,不应当往容器本身的存储层(文件系统)中写数据,而是应当用数据卷(Volume)。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器可以随意删除、重新 run,数据却不会丢失。

仓库

用于集中的存储、分发镜像。

公开服务:Docker官方的镜像存储服务器,一般比较慢,但可以使用国内的加速器。

私有的服务:Docker Registry可以自己搭建, Docker 官方也提供了搭建Docker Registry的官方镜像

下图是Docker 的总结图

Docker的安装

Mac下安装Docker

https://download.docker.com/mac/stable/Docker.dmg

或者https://download.docker.com/mac/stable/Docker.dmg

或者https://docs.docker.com/docker-for-mac/

和一般的应用安装应用一样,安装完后如下:

设置加速

https://ftheyftp.mirror.aliyuncs.com

在Centos6.5中。只需要修改 /etc/sysconfig/docker文件,加上下面这句

other_args=--registry-mirror=https://0yrztjfu.mirror.aliyuncs.com并重启docker就好了

Docker的基本操作

对镜像

镜像的搜索:

代码语言:txt复制
docker search Name

镜像的获取:

代码语言:txt复制
docker pull Name:Tag

镜像的查看:

代码语言:txt复制
docker images

镜像的标签:

一个镜像可以定义多个标签

代码语言:txt复制
docker tag REPOSITORY:TAG MY_REPOSITORY:TAG; 

镜像的删除:

删除可以是REPOSITORY:TAG, 也可以是镜像的ID

按tag删除时,一个镜像还有其他标签是,这个镜像不会完全删除,直到这个是最后的标签。

代码语言:txt复制
docker rmi CONTAINERID
docker rmi NAME:TAG

删除全部镜像

代码语言:txt复制
docker rmi $(docker images -q) 

Docker 的导出:

代码语言:txt复制
docker save -o ~/Documents/99temp/onlyoffice_doc_server.tar onlyoffice:0.1

Docker的载入:

代码语言:txt复制
docker load < onlyoffice_doc_server.tar

Docker保存镜像:

代码语言:txt复制
docker commit -m 'add chinese fonts' -a 'demo' 629c927b43b3 onlyoffice:0.1 

对容器

查看容器:

代码语言:txt复制
docker ps
docker create # 创建容器,但不运行
docker run 创建容器,并且运行

典型的命名:

代码语言:txt复制
docker run -i -t -d -p 8080:80 -h onlyofficeweb --name onlyoffice --restart=always onlyoffice/documentserver

#-it 参数保存标准输入打开,并分配一个伪终端

#--restart=always 异常情况下总是重新启,包括:不可知的错误(内存溢出等)、docker服务启动时

进入容器:

代码语言:txt复制
docker attach ContainerID/ContainerNamedocker exec -it ContainerID bash

#-it 是必选的

容器的启动、停止:

代码语言:txt复制
docker start CONTAINER
docker stop CONTAINER

删除容器:

代码语言:txt复制
docker rm CONTAINER

删除全部容器

代码语言:txt复制
docker rm $(docker ps -aq) 

-a:列出全部容器包括没有运行的;-q:列出容器的id

重命名

代码语言:txt复制
docker rename CONTAINER NEWNAME

输出容器的特定信息

代码语言:txt复制
docker inspect -f "{{ .Mounts }}” web1
docker inspect -f '{{ (index .Mounts 0).Source }}' containerid

数据卷

创建并启动一个nginx, 新建数据卷/web

代码语言:txt复制
docker run -it -d -P --name web -h web1 -v /web nginx

bind 绑定一个本地目录为容器的数据卷:

代码语言:txt复制
docker run -it -d -P --name -h web1 web -v /Users/demo/Documents/workspace/docker/volumes/web1:/web nginx

数据共享: #web2 会共享web1中所用的数据卷

代码语言:txt复制
docker run -it -d -P -h demoweb2 --name web2 --volumes-from web1 nginx 

端口

-P 随机分配端口映射(49000 ~ 49900)

-p 8000:80 本机的8000端口映射到容器的80端口

代码语言:txt复制
docker run -it -d -P --name web -h web1 -v /web nginx
docker run -it -d -p8000:80 --name web -h web1 -v /web nginx

容器互联

代码语言:txt复制
docker run -it -d -P -h web1 --name web --link db:db nginx

0 人点赞