首页 > 技术文章 > Docker基础操作

pywjh 2019-03-18 19:09 原文

  

环境配置的问题

在软件开发的过程当中,经常会遇到的一个问题,就是环境配置的问题,例如一个python程序,首先要有python引擎,以及其他各种依赖、和环境变量。如果不能保证环境的一致性,那可能就会出现,「这段代码在我机器上没问题啊」。所以要想办法从根本上解决这个问题,也就是在安装的时候,把原始环境也获取到。

虚拟机

虚拟机就是解决环境问题的一种方法,它可以一个操作系统当中运行另外一个操作系统。例如在windows里面运行linux环境。

而这种解决方法有几个缺点:

             1.资源占用比较大虚拟机需要占用一部分内存和磁盘空间,当它运行的时候,其他程序是不能使用这些资源的。

             2.步骤比较多,因为虚拟机启动的是一个完整的操作系统,所以一些系统级别的操作无法跳过。

linux容器

因为虚拟机的一些缺点,所以在linux当中又有了一种虚拟化技术:容器。容器不是一个完整的操作系统,而是对进程的隔离。对于容器里面的进程来讲,它所接触到的资源全部都是虚拟的。

由于容器是进程级别的,所以相对于虚拟机来说有很多优点。

             1.资源占用少

             2.体积小

             3.启动快

什么是Docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。 Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

Docker基本配置

1.安装

ubuntu下面执行wget -qO- https://get.docker.com/ | sh命令安装Docker如果命令的方式无法安装,也可以使用apt-get install docker.io进行安装。

安装完成后使用sudo docker run hello-world来测试是否安装成功。

也可以借鉴链接

添加用户组

默认情况下,docker 命令会使用 Unix socket Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

sudo usermod -aG docker $USER执行之后重启服务注意:这里不用更改USER 这个环境变量就是指当前用户名

添加镜像加速

在国内拉取Docker Hub镜像时,速度会比较慢,此时一般需要配置镜像加速器。配置阿里云Docker镜像加速器打开开发者平台(https://dev.aliyun.com/search.html) – 管理中心加速器。可以看到"您的专属加速器地址"https://xxxxxxx.mirror.aliyuncs.com然后打开/etc/docker/daemon.json文件(没有时新建该文件) 在文件中写入

{
  "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}

最后重启服务。

2.使用镜像

2.1.镜像

我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu 16.04 最小系统的 root 文件系统。

2.2 获取镜像及运行

Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像并运行。docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

             Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub

             仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

例如:docker pull ubuntu:16.04就是获取官方仓库当中library/ubuntu 仓库中标签为 16.04 的镜像。

当获取完镜像之后可以通过docker run命令来运行。

例如:docker run ubuntu:16.04 cat /etc/os-release在运行之后会输出ubuntu的系统版本信息。

2.4 删除镜像

对于一些用不到的镜像,可以通过docker image rm命令进行删除。docker image rm [选项] <镜像1><镜像2>其中<镜像>可以是镜像的短ID,也可以是镜像名字. 在删除之前通过docker image ls获取本地环境的所有镜像.

wangxian@wangxian:~$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               5e8b97a2a082        2 weeks ago         114MB
wangxian@wangxian:~$ docker image rm 5e8b97a2a082     
Untagged: ubuntu:16.04
Untagged: ubuntu@sha256:b050c1822d37a4463c01ceda24d0fc4c679b0dd3c43e742730e2884d3c582e3a
Deleted: sha256:5e8b97a2a0820b10338bd91674249a94679e4568fd1183ea46acff63b9883e9c
Deleted: sha256:ef572e1ba2ecca900f0ec3db00e997de12dd380ce3e360b5813fd75920232359
Deleted: sha256:98fc4d5421178c7be7d5718d2d44abba8053dc5c712e51658fe5b872675b4f7a
Deleted: sha256:7b2cc05dfd889e28234f8831c80ac20cf299d5bbebbbac013f8f7d2b7abc0d65
Deleted: sha256:6b0187d1cdff63eb5966ac72bf4ccd96150586c1409eb858bb98783f02018ee7
Deleted: sha256:644879075e24394efef8a7dddefbc133aad42002df6223cacf98bd1e3d5ddde2

另外也可以配合dokcer image ls -q来使用. docker image rm $(docker image ls -q)删除所有的镜像

 

3.操作容器

             2.容器

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

 

docker image ls列出当前已经下载下来的镜像,列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间。

启动容器(后台模式)

docker run -d -p 80:80 nginx在后台运行nginx,把容器的80端口映射到宿主机  运行之后可以通过docker ps命令查看正在运行的容器也可以通过docker logs 容器id查看容器的标准输出

删除容器

在删掉一个容器之前需要保证当前容器没有在运行,如果在运行的话需要在删除之前,通过docker stop 容器id来停止运行,然后通过docker rm 容器id来删除容器.

docker rm $(docker ps -a -q)删除所有的容器

删除镜像

和删除容器基本类似,在删除镜像之前要保证没有容器在使用当前镜像,然后在通过docker rmi image id来删除镜像。

docker rmi $(docker images -q)删除所有镜像

 

 

 

 

 

 

 

 

 

 

 

 

 

 

推荐阅读