Docker(虚拟化技术)

一. Docker简介

Docker 是一个开源的应用容器引擎,诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)

Docker 可以让开发者打包他们的应用,以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。Docker容器是完全使用沙箱机制,相互隔离,性能开销也极低。

从 17.03 版本之后,Docker分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)

Docker通俗的讲是服务器中高性能的虚拟机,可以将一台物理机虚拟N多台虚拟机的机器,互相之间隔离,互不影响。

网站Docker: Accelerated Container Application Development

1.1虚拟机网卡配置

1.2虚拟机和容器的区别

1.3Docker基本概念

宿主机:安装Docker守护进程的Linux服务器,称之为宿主机;

镜像(Image):Docker 镜像,就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

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

仓库(Repository):仓库可看成一个镜像控制中心,用来保存镜像。

1.4虚拟化技术主要作用

  • 软件跨环境迁移问题(代码的水土不服)

  • 高性能的物理硬件产能过剩

二.Docker安装和启动

注意,一定安装在CentOS 7.x及以上版本,CentOS6.x的版本中有Bug

  • yum包更新到最新
sudo yum update
  •  安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  •  配置yum源的代理,类似于maven镜像仓库,加速下载软件。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 安装docker
sudo yum install docker-ce
  •  安装后查看docker版本,是否安装成功
docker -v 或者 docker info 查看Docker信息

 2.2 Docker守护进程相关命令

启动docker:
systemctl start docker
停止docker:
systemctl stop docker
重启docker:
systemctl restart docker
查看docker状态:
systemctl status docker
开机启动:
systemctl enable docker
查看docker概要信息
docker info
 出现这个错误说明不要复制代码了,手打一遍
docker info概要信息

2.3 镜像加速

  • 编辑该文件(最好先进入docker目录再 vim daemon.json)
vim /etc/docker/daemon.json  
  • 配置daemon.jsom文件
{
  "registry-mirrors": [  
  		"https://docker.mirrors.sjtug.sjtu.edu.cn/",
  		"https://docker.m.daocloud.io/",
 		"https://noohub.ru/",
 		"https://huecker.io/",
  		"https://dockerhub.timeweb.cloud/",
  		"https://registry.cn-hangzhou.aliyuncs.com/",
  		"https://docker.agsv.top/",
	    "https://hub.iyuu.cn/]"
}
  • 重新读取配置文件
sudo systemctl daemon-reload
  •  重启docker
sudo systemctl restart docker
 配置后docker info成功页面

失败页面 

三、Docker中常用命令

3.1镜像相关命令

  • 查看本地所有镜像
docker images
  •  无法使用!
docker search 镜像名称
  • 拉去镜像
docker pull 镜像名称
  •  删除镜像
docker rmi 镜像ID

3.2 容器相关命令

  •  查看正在运行的容器
docker ps
  •  查看所有容器
docker ps –a
  •  查看最后一次运行的容器
docker ps –l
  • 查看停止的容器
docker ps -f status=exited
  •  创建容器
docker run 参数 镜像名称:镜像标签 /bin/bash
  •  参数详解
xxxxxxxxxx  ## 命令参数详解
-i:表示运行容器​
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端(如果只加it两个参数,创建后就会自动进去容器)。 
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。 
--name :为创建的容器命名。
​-v:表示目录映射关系(前者是宿主机目录,后者是映射到容器上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。​
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射​进入容器之后,初始化执行的命令:/bin/bash;可写可不写
  •  交互式容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
  •  守护式容器
docker run -di --name=容器名称 镜像名称:标签 /bin/bash
  •  登录容器
docker exec -it 容器名称 (或者容器ID)  /bin/bash

注意:这里的登陆容器之后执行的脚本/bin/bash必须写   

  • 停止容器

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

docker start 容器名称(或者容器ID)
  •  查看容器IP地址
docker inspect 容器名称(容器ID) 
  •  删除容器
docker rm 容器名称(容器ID)

 MYSQL部署

docker run -di --name=c_mysql -p 3306:3306 -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
docker exec –it c_mysql /bin/bash

 tomcat部署

docker run -id --name=c_tomcat -p 8080:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:10

 Redis部署

docker run -id --name=c_redis -p 6379:6379 redis:6.0

 四、制作Docker镜像

 1、容器保存为镜像

docker commit {正在运行容器名称} {镜像名称}:{镜像标签}
# 举例
docker commit c_tomcat c_tomcat_bak

2、镜像备份

docker save -o {镜像的备份文件} {镜像名称}
# 举例
docker save -o c_tomcat_bak.tar c_tomcat_bak
# -o :输出到的文件

3、镜像恢复与迁移

docker load -i {备份的镜像文件}
# 举例
docker load -i c_tomcat_bak.tar
# -i :指定导入的文件

4.3 Dockerfile简介

Dockerfile 是一个文本文件,包含了构建镜像文件的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像;

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境

  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像,直接开始工作

  • 对于运维人员:在部署时,可以实现应用的无缝移植

关键字作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]
CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

4.4 将springboot的可执行jar包制作为docker镜像

  • 在IDEA中编辑Dockerfile文件
# 定义基础镜像
FROM openjdk:17
# 定义作者信息
MAINTAINER  ss 
# 添加jar包文件到镜像中
ADD springboot.jar app.jar
# 定义当前镜像启动容器时,执行命令
CMD java –jar app.jar
  • 在宿主机中,构建镜像
docker build –f {dockerfile的文件路径} –t {镜像名称:版本} {构建文件所在路径}
# 举例
docker build -f Dockerfile -t myspringboot:1.0 ./
# -f:指定要使用的Dockerfile路径;
# -t:镜像的名字及标签,通常 name:tag 或者 name 格式,不设置为latest
# 一定不要忘记最后./ 构建文件所在路径
  • 基于镜像,启动容器
docker run -di --name=myspringboot -p 9000:8080 myspringboot:1.0

 注意: 一定不要忘记最后./ 构建文件所在路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值