Docker学习

1、什么是Docker

  docker是一种应用容器技术,是系统层面上的虚拟化。docker容器使用了沙箱机制,所以docker容器之间不会相互影响,各自独立运行着。

2、Docker的作用

  既然docker是一个容器,那它就是用来装东西的,可以装什么东西呢?各种应用程序,例如:tomcat、mysql、redis等。从下面这张图片可以知道,鲸鱼就好比是一个个系统,鲸鱼背上的集装箱是一个个docker容器,我们使用的应用程序则装在集装箱里面。以前我们把项目从Window部署到Linux上时,需要在Linux上配置与Window上相同的环境,才得以将项目运行起来,而且可能由于环境的不同,导致出现项目运行不起来的情况。docker的出现,则把这个问题给解决了,就是把运行环境给打包到一个个容器里,则实现了“一次封装,处处运行”的效果。无论把项目部署到哪里,我们只要把容器运行起来,就可以把项目给运行起来,无需把关注点放到配置环境上。

3、Docker三要素

  • 仓库:用于存放镜像文件,即可建立本地仓库,也可以通过远程仓库把镜像文件拉取到系统中使用。
  • 镜像:是一个模板,一个类,是静态的。通过镜像可以创建一个个的容器。
  • 容器:是一个对象,是动态的。由镜像创建出来,我们可以将应用程序部署到容器上面。容器之间互相隔离,互不影响。

4、阿里云镜像加速器配置

  1. 获取镜像加速器地址:dev.aliyun.com
  2. 进入管理控制器--->找到镜像加速器--->进入系统进行配置
  3. 复制加速器地址,写入到如下文件中。
vim /etc/docker/daemon.json

 

5、常用命令

5.1、镜像命令(增删改查)

5.1.1 查看镜像

docker images

5.1.2 从远程仓库中搜索镜像

docker search 镜像名
eg:docker search nginx

5.1.3 拉取镜像到本地系统

docker pull 镜像名
eg:docker pull nginx    #不指定版本号,则拉取最新版本

5.1.4 删除镜像

docker rmi 镜像ID
eg:docker rmi 992e3b7be046

# 删除所有镜像(慎用)
docker rmi `docker images -q`

5.2 容器命令(增删改查)

5.2.1 查看容器

# 查看正在运行的容器
docker ps

# 查看所有容器
docker ps -a

# 查看最有一次运行的容器
docker ps -l

# 查看停止的容器
docker ps -f status=exited

5.2.2 创建与启动容器

① 创建容器常用参数说明

  • docker run
 1 -i:表示运行容器
 2 
 3 -t:表示启动容器时,进入命令行模式
 4 
 5 --name:指定容器的名字
 6 
 7 -v:表示与宿主机的目录进行映射(前者为宿主机目录,后者为容器目录)。宿主机目录内容,会同步到容器目录中
 8 
 9 -d:表示为以后台式运行容器
10 
11 -p:表示端口映射(前者是宿主机端口,后者为容器端口)

② 交互式方式创建容器

  • (前台容器)启动容器的同时,进入该容器命令行。当使用exit退出容器时,则该容器也会被停止,但是还没有被删除。
 1 docker run -it --name=容器名称 镜像名称:标签 /bin/bash
 2 
 3 # 比如:docker run -it --name=mycentos centos:7 /bin/bash
 4 
 5 # docker run:表示创建容器
 6 
 7 # -it:表示运行容器并进入它的命令行
 8 
 9 # --name=mycentos:给当前的容器命名
10 
11 # centos:7:使用该镜像创建
12 
13 # /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash

③ 创建守护式容器(后台容器)

docker run -id --name=容器名 镜像名:版本号
eg:docker run -id --name=mycentos5 centos:7

# 进入守护式容器
docker exec -it 容器名称 (或者容器ID)  /bin/bash
eg:docker exec -it mycentos5 /bin/bash

5.2.3 停止与启动容器

停止容器

docker stop 容器名称(或者容器ID)
eg:docker stop mycentos5

启动容器

docker start 容器名称(或者容器ID)
eg:docker start mycentos5

5.2.4 文件拷贝

  • 文件拷贝:即将宿主机上的文件拷贝到容器上。
docker cp 需要拷贝的文件或目录 容器名称:容器目录
例如: docker cp anaconda-ks.cfg mycentos5:/tmp

  •  从容器中,拷贝文件到宿主机中(注意:需要在宿主机)。
docker cp 容器名称:容器目录 需要拷贝的文件或目录
eg:docker cp mycentos5:/tmp/anaconda-ks.cfg ./

5.2.5 目录挂载

  • 目录挂载:使宿主机与容器的目录进行映射关系,一方的改变则会影响另一方。在创建新容器时,进行目录挂载。
# -v参数 后边为 宿主机目录:容器目录
docker run -di --name=容器的名字 -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos6 centos:7

比如:docker run -di --name=mycentos6 -v /tmp/myhtml:/tmp/myhtml centos:7

5.2.6 查看容器IP地址

docker inspect 容器名称(容器ID) 

# 在linux宿主机下查看 mycentos6 的ip

  • 指定信息进行查询
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
# 例如:docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos6

5.2.7 删除容器

  • 删除指定容器(前提:停止运行的容器)。删除容器后,即可以删除镜像
docker rm 容器名称(容器ID)
例如:docker rm mycentos1

6、用docker进行应用部署

6.1 MySQL部署

6.1.1 从远程仓库中,拉取mysql镜像

docker pull mysql

6.1.2 创建mysql容器

# 创建mysql5.7容器
# docker run -di --name=容器名字 -p 宿主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=mysql密码 容器名称

docker run -di --name=mysql5.7 -p 9999:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

6.1.3 连接数据库

7、容器的迁移与备份

 7.1 将容器保存为镜像

# 保存nginx容器为镜像
docker commit 容器名称  镜像名称
例如:docker commit mynginx mynginx_i

7.2 镜像备份

# 命令形式:docker save –o tar文件名 镜像名
# 保存镜像为文件 -o:表示output 输出的意思
docker save -o mysql.tar mysql-01

7.3 进行恢复与迁移

  • 镜像恢复
# 命令形式:docker load -i tar文件名
docker load -i mysql.tar

  • 需要迁移时,则直接将tar文件移到到其他宿主机即可,然后进行镜像恢复即可。

8、Dockerfile

8.1 什么是Dockerfile

  我们上面使用的镜像都是官方或其他人提供的,当我们需要创建直接的镜像文件时,则需要创建Dockerfile,来进行配置,通过该文件,则可以生成对应的镜像(定制镜像)。Dockerfile是由一条条指令和说明所构成的。

8.2 Dockerfile常用指令

8.3 使用Dockerfile创建镜像

8.3.1 创建目录

mkdir –p /usr/local/dockerjdk8

8.3.2 定制镜像

  1. 使用ftp工具连接宿主机,上传文件

  2. 将该文件移动到刚刚创建的目录下

mv jdk-8u144-linux-x64.tar.gz /usr/local/dockerjdk8

  3. 创建Dockerfile文件

# Dockerfile 名字不要改
vim Dockerfile

# 写入以下内容
#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER BaiYun
#切换工作目录
WORKDIR /usr
RUN mkdir  /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u144-linux-x64.tar.gz /usr/local/java/

#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

  4. 执行命令,构建镜像

docker build -t='jdk1.8' .

8.3.3 查看定制镜像是否构建成功

9、搭建私有仓库

9.1 什么是私有仓库

  私有仓库:仓库即是存放多个镜像的地方,私有表示为只能在内网中使用。Docker hub(https://hub.docker.com)则是对外网提供服务的,当我们没有联网时,则需要在私有仓库里拉取镜像下来。

9.2 私有仓库的搭建和配置

  1. 拉取私有仓库镜像

docker pull registry

  2. 启动私有仓库容器

docker run -di --name=registry-01 -p 5000:5000 registry

  3. 浏览器打开http://192.168.43.129:5000/v2/_catalog

  4. 修改daemon.json

vim /etc/docker/daemon.json

# 添加以下内容
"insecure-registries":["192.168.43.129:5000"]

  5. 重启docker

systemctl restart docker

9.3 上传镜像到私有仓库

  1. 标记此镜像为私有仓库的镜像

# docker tag jdk1.8 宿主机IP:5000/jdk1.8
docker tag jdk1.8 192.168.43.129:5000/jdk1.8

  2. 再次启动私有仓库

docker start registry

  3. 上传镜像

# docker push 宿主机IP:5000/jdk1.8
docker push 192.168.43.129:5000/jdk1.8

  4. 刷新http://192.168.43.129:5000/v2/_catalog

10、从私有仓库拉取镜像

  • 从私有仓库中拉取镜像
docker pull 192.168.43.129:5000/tomcat-01

  • 列出私有仓库中的所有镜像
curl  http://192.168.43.129:5000/v2/_catalog

  • 列出tomcat-01镜像有哪些tag
 curl http://192.168.43.129:5000/v2/tomcat-01/tags/list

posted @ 2020-10-07 20:18  白雲  阅读(243)  评论(0编辑  收藏  举报