Docker的应用(上)

335 阅读7分钟

一、Docker简介

  • 问题:

当我们想运行一个war项目的时候,就需要一个tomcat,当我们想运行一个tomcat的时候,就要一个JDK,当我们想要一个JDK的时候,我们要一个操作系统环境。而操作系统环境多种多样,JDK的版本也有很多,tomcat也有多个版本,这样不同的系统环境,安装不同的JDK,不同的tomcat可能会导致我们的程序出问题。

  • 解决:

当我们运行程序的时候,不是单单部署这个程序,而且把这个程序相关的环境也一并打包运行了。 就象我们要种土豆,不仅仅要土豆种子,还把土豆生成所需要的水,空气,温度,阳光也打包起来,这样我们就可以在任意地方打开这个包,就可以种植土豆了。我们把这个包叫容器,也就是我们的土豆在容器里面生长,就不再关心容器外面的环境是怎么样的。

Docker是一个开源的容器引擎,它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包,测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。

官网:https://www.docker.com

二、Docker的组成及安装

1. Docker的组件名词解释

  • Docker的客户端和服务器 Docker是一个C/S结构的软件。Docker客户端是用来打包和解包软件运行环境的。Docker服务端可以看成一个在线仓库,里面有很多已经打包好的软件及软件运行环境(就是下面说的镜象),可以直接下载运行。
  • Images镜象 Docker的主要工作是打包运行环境及软件。打包好的文件就是一个镜象(Images),这个镜象就象我们下载的.exe文件一样,可以多次使用。
  • Container容器 镜象运行起来,就是运行起来一个容器,容器里面就是装我们要运行的软件。一个镜象可以运行起多个容器。

2. Docker的安装

  • 在CentOS7中安装Docker的步骤:
# 1、yum 包更新到最新
sudo yum update

# 2、作用:安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依
赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 3、 设置yum源
# 3.1、方案一:使用ustc的(推荐)
sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

# 3.2、方案二:使用阿里云(可能失败)
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4、 安装docker;出现输入的界面都按 y
sudo yum install -y docker-ce

三、Docker的常用操作

1. 启动docker

systemctl start docker  
  • 系统控制台启动docker服务。
CentsOS7的命令 : 
	查看IP地址是: ip addr
	服务启动控制: systemctl start 服务名称
  • 查看docker的服务信息:
docker info
  • 会展示出(我的docker已经是使用过的了):
[root@localhost ~]# docker info
Containers: 3
 Running: 0
 Paused: 0
 Stopped: 3
Images: 6
  • 表示有6个镜象,3个容器,其中运行的容器0个,暂停的0个,停止的3个。还有一些其它信息。

2. 镜象操作

  • docker可以连接docker服务器下载镜象。
docker search redis
  • 此命令是展示docker服务器上有关redis的所有镜象
NAME    DESCRIPTION   								STARS   OFFICIAL    AUTOMATED
redis   Redis is an open source key-value store ..   6883   [OK]                
....
  • NAME : 镜象名称
  • DESCRIPTION :镜象说明
  • STARS:收藏数
  • OFFICAL:是否是官方仓库
  • AUTOMATED:是否是自动构建的仓库。 下载镜象
docker pull redis

列出所有已经下载的镜象

docker images

展示信息为:

REPOSITORY               TAG         IMAGE ID            CREATED             SIZE
centos/mysql-57-centos7  latest      2e4ddfafaa6f        4 months ago        445MB
centos                    7          5182e96772bf        5 months ago        200MB
redis                     latest     4e8db158f18d        5 months ago        83.4MB
tomcat                    7-jre7     fa2c33156fb9        5 months ago        357MB
nginx                     latest     c82521676580        5 months ago        109MB
registry                  latest     b2b03e9146e1        6 months ago        33.3MB
  • REPOSITORY:表示镜象名称
  • TAG:镜象标签版本
  • IMAGE ID :镜象的ID
  • CREATE:创建时间
  • SIZE:大小 删除镜象
docker rmi nginx

3. 容器操作

创建并启动容器

创建容器命令:docker run 常用的参数:

-i:表示运行容器

-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

--name :为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

交互式方式创建容器

docker run -it --name=容器名称 镜像名称:标签 /bin/bash

这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态

  • 退出当前容器
exit
  • 守护式方式创建容器
docker run -di --name=容器名称 镜像名称:标签
  • 登录守护式容器方式
docker exec -it 容器名称 (或者容器ID)  /bin/bash

查看容器

  • 查看正在运行的容器
docker ps
  • 查看所有容器
docker ps –a

停止与启动容器

  • 停止容器:
docker stop 容器名称(或者容器ID)
  • 启动容器:
docker start 容器名称(或者容器ID)

删除容器

docker rm 容器名称(容器ID)

4. 文件交互

文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或目录 容器名称:容器目录

也可以将文件从容器内拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录

目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。 创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

如果你共享的是多级的目录,可能会出现权限不足的提示。

这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题

5. 端口映射

docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。 如果想要在容器外部访问到容器 , 那么就需要进行端口映射 : 把虚拟机的端口映射到容器上 docker指令:docker run -p 虚拟机端口:容器端口 容器名称 例如 :

# 将虚拟机的6379端口映射到myredis容器的6379端口 , 访问虚拟机的6379端口就会自动转发到容器中访问容器的6379端口
docker run -di --name=myredis -p 6379:6379 redis

6. 测试容器

docker run -di --name=myredis -p 6379:6379 redis

可以启动一个redis容器,端口是6379,程序代码就可以使用redis了。

redis-cli -h 192.168.199.131 -p 6379