一、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