Docker安装以及使用

发布时间:2024年01月05日

1.Docker概念

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

? Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。

? 容器是完全使用沙箱机制,相互隔离 ? 容器性能开销极低。

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

2.安装Docker

2.1Docker可以运行在MAC,Windows,CentOS,UBUNTU等操作系统上。官网地址:http://www.docker.com/

2.2安装示例,CentOS7操作系统安装:

(1)、yum 包更新到最新

yum update

(2)、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

yum install -y yum-utils device-mapper-persistent-data lvm2

(3)、 设置yum源

yum-config-manager --add-repo?https://download.docker.com/linux/centos/docker-ce.repo

(4)、 安装docker,出现输入的界面都按 y

yum install -y docker-ce

(5)、 查看docker版本,验证是否验证成功

docker -v

3.Docker架构

4.配置Docker镜像加速器

4.1配置示例:阿里云配置示例

(1)进到阿里云控制台,搜索镜像加速器。

(2)进入到当前页面,选择打勾处的脚本,粘贴到CentOS7操作系统里面,进行执行就可以了。

Docker进程相关命令

(1)启动docker服务:systemctl start docker

(2)停止docker服务:systemctl stop docker

(3)重启docker服务:systemctl restart docker

(4)查看docker服务状态:systemctl status docker

(5)设置开机启动docker服务:systemctl enable docker

Docker镜像相关命令

(1)查看镜像:查看本地所有的镜像

docker images; docker images -q; 查看所有镜像的id

(2)搜索镜像:从网络中查找需要的镜像

docker search 镜像名称

(3)拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本。 如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。

docker pull 镜像名称

(4)删除镜像:删除本地镜像

docker rmi 镜像id;删除指定本地镜像 docker rmi ‘docker images -q’; 删除所有本地镜像

Docker容器相关命令

(1)查看容器:docker ps; 查看正在运行的容器 docker ps –a; 查看所有容器

(2)创建并启动容器:docker run 参数

参数说明:

* -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中 ,退出容器后,容器自动关闭。

* -t:为容器重新分配一个伪输入终端,通常与-i同时使用。

* -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec进入 容器。退出后,容器不会关闭。

* -it:创建的容器一般称为交互式容器,-id创建的容器一般称为守护式容器。

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

(3)进入容器:docker exec 参数;退出容器,容器不会关闭

(4)停止容器:docker stop 容器名称

(5)启动容器:docker start 容器名称

(6)删除容器:如果容器是运行状态则删除失败,需要停止容器才能进行删除

docker rm 容器名称

(7)查看容器信息:docker inspect

Docker容器的数据卷

数据卷概念

配置数据卷

数据卷容器

配置数据卷容器

(1)创建启动c3数据卷容器,使用 –v 参数 设置数据卷

docker run –it --name=c3 –v /volume centos:7 /bin/bash

(2)创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷

docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash

数据卷小结

(1)数据卷概念:宿主机的一个目录或文件,前提是挂载到容器所对应的目录或文件。

(2)数据卷作用:1.容器数据持久化。2.客户端和容器数据交换。3.容器间数据交换。

(3)数据卷容器:创建一个容器,挂载一个目录,让其它容器继承该容器;通过简单的方式实现数据卷配置

Docker 应用部署

部署MySQL

(1)搜索mysql镜像:docker search mysql

(2)拉取mysql镜像:docker pull mysql

(3)创建容器,设置端口映射、目录映射:

在/root目录下创建mysql目录用于存储mysql数据信息

mkdir ~/mysql

创建容器

docker run -id -p 3307:3306 --name=mysql1 -v /mysql/conf:/etc/mysql/conf.d -v /mysql/log:/etc/mysql/log -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

  • 参数说明:
    • -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
    • -v $PWD/mysql/conf:/etc/mysql/conf.d:将主机当前目录下的 /mysql/conf/ 挂载到容器的 /etc/mysql/my.cnf。配置目录
    • -v $PWD/mysql/log:/log:将主机当前目录下的 /mysql/log 目录挂载到容器的 /log。日志目录
    • -v $PWD/mysql/data:/var/lib/mysql :将主机当前目录下的/mysql/data目录挂载到容器的 /var/lib/mysql 。数据目录
    • -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

(4)当我们退出容器后,可以借助下面这个命令进入容器:

docker exec –it c_mysql /bin/bash

Dockerfile

Docker 镜像原理

总结:

(1)Docker镜像的本质是一个分层文件系统.

(2)Docker的复用技术,使Docker中拉取centos镜像时,只需要拉取rootfs基础镜像,而复用了当前宿主机上的bootfs,因为不同的liunx发行版上所使用的bootfs基本一样,所以,拉取centos时只有70M左右,而一个centos操作系统的iso文件就要几个G。

(3)但拉取tomcat时,却有500M左右,比我们平时获取tomcat的安装包大了许多,其实这是因为,tomcat在拉取时,需要指定其它的父镜像,因为它需要依赖与这些环境,比如rootfs基础镜像,jdk镜像,然后再是tomcat镜像;几个镜像叠加在一起,就会变得很大。

镜像制作

1.容器转为镜像:

(1)把容器转换为镜像:docker commit 容器id 镜像名称:版本号

(2)把镜像压缩成文件以方便传输:docker save -o 压缩文件名称 镜像名称:版本号

(3)把镜像文件进行解压缩,恢复成镜像:docker load –i 压缩文件名称


2. 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

自定义一个centos7镜像。要求:

(1)默认登录路径为/usr

(2)可以使用vim

实现步骤:

(1)定义父镜像:FROM centos:7

(2)定义作者信息:MAINTAINER 作者信息或者邮箱

(3)执行安装vim命令:RUN yum install -y vim

(4)定义默认的工作目录:WORKDIR /usr

(5)定义容器启动执行的命令:CMD /bin/bash

(6)通过dockerfile构建镜像:docker build -f dockerfile文件路径 -t 镜像名称:版本 .

(7)构建镜像命令示例:


定义一个springboot项目镜像

实现步骤:

(1)定义父镜像:

(2)定义作者信息:MAINTAINER 波 <bo@bo.cn>

(3)将jar包添加到容器:ADD springboot.jar app.jar

(4)定义容器启动执行的命令:CMD java -jar app.jar

(5)通过dockerfile构建镜像:docker build -f dockerfile文件路径 -t 镜像名称:版本 .

(6)构建镜像命令示例:docker build -f ./文件名 -t app:1 .

文章来源:https://blog.csdn.net/2401_82356378/article/details/135328679
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。