docker学习(二):入门实战篇

Docker环境的安装

(由于我是win7系统,所以以win7系统为例)
(win7已停止更新,附加win10 docker desktop安装)

win7系统

win7系统需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/
docker toolbox是一个工具集,里面主要包含以下内容:

  1. Docker CLI:客户端,用来运行docker引擎创建镜像和容器
  2. Docker Machine:可以让你在windows的命令行中运行docker引擎命令
  3. Docker Compose:用来运行docker-compose命令
  4. Kitematic:这是Docker的GUI版本
  5. Docker QuickStart shell:这是一个已经配置好Docker的命令行环境
  6. Oracle VM Virtualbox:虚拟机
  7. Git:版本控制系统

下载完成之后,直接开始安装,安装到最后的工具的选择的时候,如果电脑里已经有了git,virtualbox之类的话,就可以不用再次安装了,把对应的选项前面的复选框里的勾勾去掉就好了。安装完成,桌面应该会有这3个图标:
在这里插入图片描述
点击 Docker QuickStart 图标来启动 Docker Toolbox 终端。
在这里插入图片描述
出现如图所示,则登陆成功。

win10系统

win10系统中的docker叫,docker desktop,下载地址:https://www.docker.com/products/docker-desktop
下载安装完成之后,打开你的cmd命令行,输入docker -v,如显示版本号,docker desktop就安装好了,想用的时候打开cmd就可以了。

Docker Hello World

作为一个程序员的习惯,装了一个新的环境,怎么能不输出一下Hello World呢。
Docker允许我们使用docker run下容器内来运行一个应用程序

docker run ubuntu:15.10 /bin/echo "Hello world"

在这里插入图片描述
各参数解析:

  • docker:Docker的二进制执行文件,基本上命令都是以它开头。
  • run:与前面的docker组合来运行一个容器。
  • ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  • /bin/echo “Hello world”: 在启动的容器里执行的命令

我们还可以通过docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力。

docker run -i -t ubuntu:15.10 /bin/bash	

各参数解析:

  • -t:在新容器内指定一个伪终端或终端。
  • -i:允许你对容器内的标准输入 (STDIN) 进行交互。
  • /bin/bash:作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。

这时候已经进入了ubuntu15.10系统的容器了,可以输入一些命令,如cat /proc/version、ls等指令来查看一下当前系统的版本信息和当前目录下的文件列表,想要退出时,输入exit指令即可。
在这里插入图片描述
当运行以下命令来创建一个以进程方式运行的容器:

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

在这里插入图片描述
输出的不是期望的hello world,而是一长串的英数字符。其实呢,这字符叫做容器ID,它具有唯一性,可以通过容器ID来查看对应的容器发生了什么。
首先,得确认刚才的容器是否在运行,可以输入 docker ps 指令来查看。
在这里插入图片描述

  • CONTAINER ID:就是容器ID
  • IMAGE:用的是哪个镜像创建的
  • NAMES:自动分配的容器名称
  • COMMAND:创建容器的命令

使用 docker logs 命令+ 容器ID 可以查看容器内的标准输出。
在这里插入图片描述
会看到刚才创建的容器一直在输出hello world,只不过是处于后台模式。
如果想要停止这个容器,可以使用 docker stop 命令 + 容器ID。
在这里插入图片描述

Docker容器的使用

Docker客户端

我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。
在这里插入图片描述
可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。
例如我们要查看 docker stats 指令的具体使用方法,可以输入以下命令:

docker stats --help

在这里插入图片描述

运行一个web应用

输入以下命令在docker容器中运行一个 Python Flask 应用来运行一个web应用。

docker pull training/webapp   # 载入镜像
docker run -d -P training/webapp python app.py

各参数说明:

  • -d:让容器在后台运行。
  • -P:将容器内部使用的网络端口映射到我们使用的主机上。

查看web应用容器

使用 docker ps 命令查看正在运行的容器:
在这里插入图片描述
这里面比之前多了一个端口信息。
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。
这时我们可以通过浏览器访问WEB应用。
在这里插入图片描述
我们也可以通过 -p 参数来设置不一样的端口:

docker run -d -p 5000:5000 training/webapp python app.py

docker ps 查看正在运行的容器
在这里插入图片描述
会发现容器内部的 5000 端口映射已经到我们本地主机的 5000 端口上了。

网络端口的快捷方式

通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
上面我们创建的 web 应用容器 ID 为 034f6a44b9c0 名字为 youthful_ride。
就可以使用 docker port 034f6a44b9c0 或 docker port youthful_ride 来查看容器端口的映射情况。
在这里插入图片描述
在这里插入图片描述

其余常用命令

  • 查看 WEB 应用程序日志:docker logs [ID或者名字]
  • 查看WEB应用程序容器的进程:docker top [ID或者名字]
  • 查看 Docker 的底层信息:docker inspect [ID或者名字]
  • 停止 WEB 应用容器:docker stop [ID或者名字]
  • 重启WEB应用容器:docker start [ID或者名字] /docker restart [ID或者名字]
  • 移除WEB应用容器:docker rm [ID或者名字]

管理容器数据

一般情况下,随着容器的创建和销毁,容器中的所有数据都会一同被销毁,但有的时候想要将数据保存下来,能够在其它情况下也能使用,即数据的持久化。如何做到这一点呢?其实很简单,只需要将宿主机的目录挂载到容器中就可以了,最常用的方式就是数据卷。

数据卷

数据卷是指存在于一个或多个容器中的特定目录,能够绕过Union File System提供一些用于持续存储或共享数据的特性。

  • 数据卷可在容器间共享或重复使用
  • 数据卷中的更改可以直接生效
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止
# docker volume create XXX  创建一个自定义的容器卷
# docker volume inspect XXX 查看一个或多个指定容器卷的详细信息
# docker volume ls 查看所有的数据卷
# docker volume prune 删除所有的没有被使用的数据卷
# docker volume remove 删除一个或多个volumes

可以在docker run命令中使用 -v 标识添加数据卷:

docker run (-d) --name nginx -v /data -tid XXXXXXXX /bin/bash
  • nginx:镜像名
  • /data:容器中想要挂载的目录
  • xxxxxxxx:镜像ID
  • /bin/bash:/bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash

Docker镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

列出镜像列表

runoob@runoob:~$ docker images           
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
hello-world         latest              690ed74de00f        6 months ago        960 B
training/webapp     latest              6fae60ef3446        11 months ago       348.8 MB

各项说明:

  • REPOSITORY:表示镜像的仓库源。
  • TAG:镜像的标签,也可以理解成版本号。
  • IMAGE ID:镜像ID。
  • CREATED:镜像创建时间。
  • SIZE:镜像大小。

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

docker run -t -i ubuntu:15.10 /bin/bash         # 必须加上版本号

如果你不指定一个镜像的版本标签,docker 将默认使用 ubuntu:latest 镜像。

获取新镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。如下:

docker pull ubuntu:15.10

查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
在这里插入图片描述

  • NAME:镜像仓库源的名称。
  • DESCRIPTION:镜像的描述。
  • OFFICIAL:是否docker官方发布。

更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。
在运行的容器内使用 apt-get update 命令进行更新。
在这里插入图片描述
在完成操作之后,输入 exit命令来退出这个容器。
在这里插入图片描述

  • -m:提交的描述信息。
  • -a:指定镜像作者。
  • 5e37ae08c371:容器ID。
  • runoob/ubuntu:v2:指定要创建的目标镜像名。

我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2:
在这里插入图片描述

构建镜像

使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。我们可以使用 docker build 来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令。
首先新建一个目录和一个 Dockerfile。

$ mkdir [文件名]          # 创建目录
$ cd [文件名]             # 进入刚刚创建的目录
$ touch Dockerfile       # 创建Dockerfile
$ vi Dockerfile          # 进入Dockerfile的编辑模式

输入如下代码:

FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
FROM指令指定使用的镜像源。
RUN指令后面都是告诉docker在镜像内要执行的命令。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
在这里插入图片描述
可以看到命令的最后,runoob/centos:6.7已经被成功创建。
参数说明:

  • -t :指定要创建的目标镜像名。
  • . :Dockerfile 文件所在目录,也可以指定Dockerfile 的绝对路径

使用 docker images 可以看到镜像已经存在。

在这里插入图片描述

设置镜像标签

可以通过 docker tag 命令,为镜像添加新标签。

docker tag 9ce20ee7a8ff runoob/centos:dev

使用 docker images 命令可以看到,ID为9ce20ee7a8ff的镜像多了一个标签。
在这里插入图片描述

Docker-Compose

当一个容器对应着多个镜像或者要定义一组相关联的应用容器时,这时候,就需要创建一个docker-compose.yml文件来进行配置,但是这个文件并不能解决负载均衡的问题。
yml文件主要包含以下几个参数:

  • build:指定 Dockerfile 所在文件夹的路径。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
  • image:指定为镜像名称或镜像 ID。如果镜像在本地不存在,将会尝试拉去这个镜像。
  • container_name:自定义的容器名。
  • ports:端口号。两个的时候,一个对应外网端口,一个对应容器内部的端口。
  • links:链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 (SERVICE:ALIAS) 格式都可以。
  • environment:设置环境变量。你可以使用数组或字典两种格式。(只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。)
  • volumes:卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。

准备完毕后,通过 docker-compose up 命令来启动。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值