Docker入门教程(22.01.18)

224 阅读7分钟

Docker基本概念

什么是Docker?

Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。

Docker的几个基本概念

镜像(Image):一个镜像就像是一个可运行的软件

容器(Container):镜像每运行一次形成一个容器,运行的容器代表正在运行的软件服务

仓库(Repository):docker官方维护的一个用来存放镜像的东西,类似于maven中的仓库

为什么会出现Docker?

  • 开发和运维两套环境,而环境配置十分麻烦。 如在Windows上开发,要发布到Linux上运行。Docker给以上问题提出了解决方案: Java --- Jar(环境)---打包项目带上环境(镜像)---Docker仓库(应用商店)---下载镜像---直接运行
  • Docker的思想来自于集装箱,核心思想:隔离。 即将应用打包装箱,每个箱子是互相隔离的,可以将服务器利用到极致。
虚拟机Docker
linux centos原生镜像(一个电脑)隔离镜像(最核心的环境 +jdk +mysql等)
需要开启多个虚拟机运行镜像就可以了
几GB几MB

Docker基本操作

容器基本操作

查看引擎中正在运行的容器

docker.ps 

查看引擎中所有的容器(运行、停止)

docker.ps -a

如何运行tomcat镜像

docker run -d -p 8080:8080 --mytomcat -v 宿主机绝对路径:容器内绝对路径 tomcat:8.0 

命令解释

端口映射 -p 8080(宿主机):8080

后台启动 -d

指定容器名称 --name

设置数据卷 -v 宿主机绝对路径:容器内绝对路

停止、启动、重启、暂停、恢复 容器

docker stop|start|restart|pause|unpause

杀死容器

docker kill id|name

删除容器

docker rm 容器id|name    删除已经停止的容器
docker rm -f 容器id|name 强制删除(即使还在运行)

查看容器内部日志

docker logs 容器id|name
docker logs -f 容器id|name    实时监控容器内服务的日志

进入容器内部

docker exec -it(交互模式) 容器id|name bash

exit  退出容器

容器和宿主机之间文件拷贝

容器 ====> 宿主机

docker cp 容器id:容器中文件或者目录   主机目录

宿主机 ====> 容器

docker cp 主机文件和目录  容器id:容器中文件或者目录

查看容器中运行的进程

docker top 容器id|name

查看容器内细节

docker inspect 容器id|name

容器数据卷机制

什么是数据卷

数据卷(Data Volume)是实现容器中数据和宿主机数据进行同步的,必须在容器首次启动时进行设置

使用绝对路径设置数据卷

docker run -v 宿主机绝对路径:容器内绝对路径:ro      

ro:read only 如果在设置时指定ro,代表日后容器内路径是只读的

这种方式将容器路径的原始内容全部清空,始终以宿主机路径为主

使用别名的方式设置数据卷

docker run -v aa:/usr/local/tomcat/webapps ...

aa:

​ 1、代表docker数据卷中的别名 (如果这个别名存在docker直接使用)

​ 2、使用别名的方式保存容器路径原始内容,前提别名对应的路径不能存在内容

将容器打包成一个新的镜像

docker commit -m "deploy test project in tomcat" -a "xiaohuang" 容器id|name 镜像名:版本

镜像的备份和回复

备份

docker save 镜像名:Tag -o (镜像名-tag).tar
如 docker save tomcat:8.0 -o tomcat-8.0.tar

恢复

docker load -i tomgcat-8.0.tar

Doker运行MySQL

运行MySQL

1、访问DockerHub 搜索MySQL,确定使用的版本

2、执行

docker pull mysql:5.6

3、运行MySQL

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d --name mysqltest --restart=always -v /root/data:/var/lib/mysql mysql:5.6

docker run -p 3306:3306 开放映射端口 -e MYSQL_ROOT_PASSWORD=root 指定用户名密码 -d --name mysqltest 自定义服务名称 --restart=always 开机自启动 -v /root/data:/var/lib/mysql 数据卷持久化到宿主机 mysql:5.6 指定运行的版本

MySQL数据备份

使用MySQL容器时数据库低层文件系统进行的备份不利于数据的迁移和备份 推荐使用sql文件的形式备份文件,

导出sql文件方式:

  • 使用MySQL官方命令

  • 在Navicat中直接导出

Docker运行Redis

运行Redis

docker run -d -p 6479:6379 -v /root/redisdata:/data --restart=always --name restRedis redis:5.0.12

自定义配置文件启动Redi

  • 获取Redis配置文件

    方式一:下载对应版本的Redis,找到配置文件进行修改 使用完整配置文件启动

    方式二(推荐):创建指定文件名直接写修改属性

  • 上传配置文件到宿主机指定目录 /root/redisconf/redis.conf

  • 数据卷挂载配置启动

    docker run --name redistest -d -p 6379:6379 --restart=always -v /root/redisdata:/data redis:5.0.12 redis-server /data/redis.conf
    

DockerFile

什么是DockerFile?

dockerFile是镜像的描述文件,可以通过dockerFile构建我们自己的镜像

为什么会有dockerFile

  • docker官方提供的镜像非常官方,通用,但不涵盖我们自己项目的操作
  • 主要原因:日后希望基于自己公司不同项目定制不同镜像,方便部署维护

image.png

dockerFile命令使用

后续补充

容器间的通信(网络的使用)

后续补充

Docker-compose

现有docker在部署项目时存在的问题

  • 一个项目需要引入多个容器,容器之间存在依赖关系,某些容器需要其他容器启动后才能正常运行

    因此容器编排显得非常重要

解决方式

  • 将一组容器划分在一起

什么是Docker-compose

compose是Docker官方开源项目,复负责对Docker容器集群进行快速编排

​ 编排:项目中的容器按照指定顺序启动

如何使用Docker-compose

Docker-compose.yml 就是应用(project)

Project:项目,一组关联的容器组成的一个完整的业务单元,在docker-compose.yml中定义

Service:一个项目中的某一个容器称为一个服务

Docke-compose命令

docker-compose相关:

  • docker-compose up -d(后台启动) [服务名称] // 启动指定服务

  • docker-compose up //启动项目中所有容器

    作用:该命令十分强大,尝试自动完成包括构建镜像,(重新)创建服务,启动服务并关联相关容器的一系类操作

  • docker-compose down // 对整个项目操作

  • docker-compose down [服务id]

作用:docker-compose down 关闭所有容器 并移除网络

  • exec

    docker-compse exec [服务id] bash

    作用:进入某个服务内部

  • ps

    docker-compose ps

    作用:列出所有运行服务

  • restart -t 20s (指定20s之后重启服务)

    docker-compose restart //对整个项目操作

    docker-compose restart -t [服务id] //对指定服务操作

    • rm

    docker-compose rm -f (强制删除) -
 v
 (删除容器所挂载的数据卷) [服务id]

    作用:删除整个项目或指定id服务

  • top

    docker-compose top [服务id]

    作用:查看整个项目中所有服务容器内运行进程或查看某个指定id服务的容器的进程

  • pause 和 unpause

    docker-compose pause [服务id]

    作用:暂停或者回复整个项目或指定id的服务

  • logs

    docker-compose logs -f(实时) [服务id]

    作用:查看整个项目中所有服务运行的日志或指定服务id的日志

docker-compose.yml模板

==待补充==

Docker可视化工具

Portainer

  • 安装
  • 登录使用