docker进程隔离,隔离级别在操作系统层面隔离。
概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
同maven一样都统一的仓库远程仓库,以及可以配置自己的本地仓库:远程仓库即为docker hub
第一个docker:
docker run hello-world
看见和hello world相关出现即成功。
docker启动常规,先Pull镜像,再run 镜像
镜像默认从docker hub拉去,地址为:https://hub.docker.com/
国内有几个镜像可以使用:
根据不同可参考菜鸟的Docker镜像加速文章:https://www.runoob.com/
如果是使用docker toolbox在config文件里配置
拉取镜像的指令,以mysql为例(mysql5.7,具体写法可参考docker hub的tags里面):
docker pull mysql:5.7
docker常用命令:
docker执行命令:docker [options] commond(具体命令) ---注意中括号处条件可选填使用
1.辅助命令:
docker info ----查看docker信息(可看系统层面以及docker镜像下载地址以及镜像等信息)
docker version ----查看docker版本号,相关的安装信息
docker --help 或者 docker ----查看docker相关指令帮助
2.images镜像命令:
docker images ----列出当前docker的所有镜像
docker image ls ----同样也是列出docker的所有镜像
docker images 镜像名 ----过滤,如查Mysql相关的各版本 docker images mysql
docker images -a -----展示所有镜像,a不写默认也是all
docker images -q -----展示容器镜像,可组合使用
docker rmi -f $(docker images -q) ----删除所有镜像和容器
docker pull 镜像名称:版本号 ----拉取镜像最常用方法
docker pull 镜像名:摘要
docker search 镜像名称:版本号(不带版本号就是最新的) ----镜像搜索(带OFFICIAL的是官方镜像)
docker image --help ----查看镜像相关的版本指令
docker image rm 镜像id -f ----带f强制删除镜像以及容器,不带-f就是只删镜像,如果有实例就不可删除
docker rmi 镜像id(可简写,写前面几位,不和其他id产生歧义即可) -f ----删除的简略写法(-f同上,强制删除容器以及镜像)
docker save 要导出的镜像名:tar版本号 -o 备份出来的名称:版本号 ----导出镜像
使用案例:docker save mysql:5.7 -o mysql_5.7.tar(值得注意的是导出的镜像文件名不能使用:冒号)
docker load -i 镜像tar包的文件名 ----导入镜像(docker images查看导入结果)
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 d54bd1054823 4 days ago 449MB
REPOSITORY 镜像名称, TAG镜像的版本, IMAGE ID 为镜像唯一id,CREATED为该镜像创建时间不是我们的拉取时间, SIZE为镜像大小
3.contrainer容器命令:(注意挂载端口不止一个的时候可以写多个-p)
docker run 镜像名:版本 或者 镜像id ----启动镜像生成一个实例容器
docker load -i 镜像 ----导入镜像
docker ps ----查看docker正在运行的容器
docker ps -a ----查看docker所有容器
docker ps -q ----查看正在运行的容器id
docker ps -qa ----查看所有容器id
docker run 镜像名:版本 或者 镜像id ----在docker中启动实例
docker run -p 宿主机端口:容器端口 镜像名:版本 或者 镜像id ----挂载启动这样外部才能访问
例子如:docker run -p 80:80 nginx 然后访问docker使用的ip,端口号都可
docker run -d -p 宿主机端口:容器端口 镜像名:版本 或者 镜像id ----后台启动
docker run -d -p 宿主机端口:容器端口 --name 指定容器名 镜像名:版本 或者 镜像id ----指定名字挂载启动,例如:docker run -d -p 82:80 --name nginx82 nginx
docker stop 容器id 或者 容器的名字 ----停止容器
docker start 容器id 或者 容器的名字 ----启动容器
docker restart 容器id 或者 容器的名字 ----重新启动容器
docker rm 容器名称或者容器id -f ----删除容器实例,-f是强制删除
docker rm -f $(docker ps -aq) ----删除强制所有容器
docker logs 容器名或容器id ----查看容器日志
docker logs -f 容器名或容器id ----查看实时容器日志
docker logs -tf 容器名或容器id ----加入时间戳实时展示容器日志
docker logs --tail 显示最后几行数 容器名或容器id ----现在最后的N行的容器日志数
docker top 容器名或容器id ----查看容器进程数
docker exec -it 容器名或容器id bash ----进入容器内部命令行(可使用ls,cd,exit等命令),切记容器必须已经开启
docker commit -m '描述' -a '作者' 容器名或者容器id 新镜像名字:版本号 下面的为例指令如:
docker commit -m 'deploy ruoyi-admin' -a 'calmtho' tomcat02 ry:1.0
将已有容器打包成新的镜像(生成完后使用查看镜像指令,就会发现我们的镜像已经生成了),自己打包的镜像和我们从docker hub下载下来的启动方式是一致的
docker inspect 容器id或者容器名 ----查看容cha器相关的详细信息,如网络等
docker logs -f 容器id ----查看容器日志
4.操作系统与容器的文件交互
4.1容器详情对照:
CONTAINER ID(容器ID) | IMAGE(镜像名) | COMMAND(容器内启动使用命令) | CREATED(创建容器时间) | STATUS(状态) | PORTS(端口) | NAMES(别名) |
---|---|---|---|---|---|---|
20b5faa63625 | nginx | “/docker-entrypoint.…” | About a minute ago | Up About a minute | 80/tcp | inspiring_poincare |
4.2容器交互指令
docker cp 容器名字或者id:文件全路径 操作系统的路径 ----将文件从容器复制到操作系统(文件目录都可以)
例子:docker cp dt:/usr/local/tomcat/RUNNING.txt ./RUNNING.txt
docker cp 宿主机路径 容器名字或者id:容器内文件全路径 ----将文件复制到操作系统(文件目录都可以)
例子: cp ./unintall.log dt:/usr/local/cp.log
docker inspect dt ----看容器信息
数据卷volumn容器和宿主操作系统交互桥梁,可以共同操作这个目录,容器启动时就必须指定:
docker run -d -p 宿主机端口:容器端口 --name 指定容器名 -v 宿主机路径:容器目录 镜像名:版本 或者 镜像id (指定目录,如果宿主机这个文件夹有东西会删掉这里面的东西,在容器中使用写操作)
docker run -d -p 宿主机端口:容器端口 --name 指定容器名 -v 一个不存在的目录名:容器目录 镜像名:版本 或者 镜像id (自动复制有的东西出来和外面挂载,目录自动创建,不写操作)
5.docker的网络连接以及其网桥操作(因为默认是网桥模式,所以是网桥名,实际是网络连接项名称)
docker inspect dt ----看容器信息(包含该容器的网桥信息)
docker network ls ----查看网络连接配置
docker network create -d bridge 网桥名称 ----创建网桥(可看见网桥下有的容器)
简写方式:因为docker创建网络连接默认使用网桥 docker network create 网桥名
docker network inspect 网桥名称 ----指定网桥名称,查看具体网桥信息
docker network connect 网桥名称 容器名称 ----指定容器连接指定网桥
docker network rm 网桥名称 ----删除网桥(需要容器没有运行在此网桥上)
补充一下,如果要让镜像实例容器的时候使用指定网桥的话,可以docker run指令上加入--network 网桥名
6.数据卷
数据卷指令往往是结合容器指令使用的,应该在实例容器的时候结合使用-v 自定义绝对路径或者由系统自动创建
1.数据的作用:
用来实现容器和宿主机之间数据共享
2.数据卷特点
a.数据卷可以在容器之间共享和重用
b.对数据卷的修改会立即影响到对应容器
3.一般我们希望宿主机影响容器,不希望容器影响宿主机,可以指令中配置数据卷配置加上:ro(read only只读的意思)
操作数据卷指令:
docker volume ls ----查看数据卷
docker volume inspect 数据卷名 ----查看数据卷详情
mysql:
docker run --name mysql5.7 -d -p 6700:3306 -v mysql:/var/lib/mysql -e /var/lib/mysql -e MYSQL_ROOT_PASSWORD=root3306 m ysql:5.7.32
当然还可以指定配置文件启动
redis:
docker run --name redis -d -p 6380:6379 -v redisdata:/data redis:5.0.10 redis-server --appendonly yes
consul:(单节点)
docker run --name consul -d -p 8500:8500 consul
es:值得注意的启动es的时候需要配置相关内存参数,或者去修改配置
docker run -d -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 --name elasticsearch elasticsearch:6.8.0
一般使用的时候需要配置es配置,es数据存储,es插件目录都需要挂载数据卷,甚至可以直接挂载es大的目录,如果没有自定义es的jvm则需要手动修改系统参数
docker run -d -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 --name elasticsearch -v D:\docker_v\es\elasticsearch\data:/usr/share/elasticsearch/data -v D:\docker_v\es\elasticsearch\plugins:/usr/share/elasticsearch/plugins -v D:\docker_v\es\elasticsearch\config:/usr/share/elasticsearch/config elasticsearch:6.8.0
kibana:指定配置关联的es的url
docker run -d --name kibana -p 5601:5601 -e ELASTICSEARCH_URL=http://ip:9200 kibana:6.8.0
挂载数据卷的形式,然后修改里面的yml文件即可,动态修改ip,修改完,停一下容器后再启动即可
docker run -d --name kibana -p 5601:5601 -v kibanaconfig:/usr/share/kibana/config -e ELASTICSEARCH_URL=http//ip:9200 kibana:6.8.0
dockerfile编写:
1.创建一个Dockerfile文件,并且指定自定义镜像信息
Dockerfile文件中常用的内容:
from:指定当前自定义镜像的依赖
copy:将相对路径下的内容复制到自定义的镜像中
workdir:声明镜像的默认工作目录
cmd:需要执行的命令(在workdir下执行的,cmd可以写多个,只以最后一个为准)
例子:
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
2.将准备号的Dockerfile和相应的文件拖拽到Linux系统中,通过Docker的命令制作镜像
docker build -t 镜像名称[:tag]
docker compose编写:
version: '3.1'
services:
mysql: #服务的名称
start: always #代表只要docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/ mysql:5.7.4#指定镜像路径
container_name : mysql #指定容器名称
ports:
- 3306:3306 #指定端口号的映射
environment :
MYSQL_RO0T_PASSWORD: root #指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai #指定时区
volumes :
- /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql #映射数据卷
tomcat :
restart: always
image: daocloud.io/library/tomcat:8.5.15-jre8
container_name : tomcat
ports:
-8080:8080environment:
TZ: Asia/Shanghai
volumes:
- /opt/docker_mysql_tomcat/tomcat_webapps :/usr/local/tomcat/webapps
- /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs
在指定目录下使用docker-compose指令,需要在有docker-compose.yml的目录下。如上面文件的/opt/docker_mysql_tomcat/下执行:
1.启动:
docker-compose up -d
2.关闭并删除容器:
docker-compose down
3.开启关闭重启已经存在的docker-compose容器
docker-compose start
docker-compose stop
docker-compose restart
4.查看docker-compose管理的容器
docker-compose ps
5.查看日志
docker-compose logs -f
类似docker指令
使用docker-compose配置Dockerfile使用
docker-compose.yml
version: '3.1'
services:
ssm:
restart: always
build:
context: ../
dockerfile: Dockerfile
image: ssm:1.0.1
container_name: ssm
ports:
- 8081:8080
environment:
TZ: Asia/Shanghai
Dockerfile文件:(由上面的配置可知,我们的dockerfile以及war包放在docker-compose的上一级)
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
#可以直接启动基于docker-compose.yml以及Dockerfile文件构建的自定义镜像
docker-compose up -d
#如果自定义镜像不存在,会帮助我们构建出自定义镜像,如果自定义镜像已经存在,会直接运行这个自定义镜像
#如果要使用重新构建的话。
#重新构建自定义镜像
docker-compose build
#运行前,重新构建
docker-compose up -d --build
MFC项目在vs2017编译正常无报错,但是升级vs2019后一打开项目就报如下错误。 项...
目录 读者基础 ?微服务架构梳理 https://www.coder4.com/homs_online/ ? ? 读者...
本文实例为大家分享了vue实现按钮切换图片的具体代码,供大家参考,具体内容如下...
今天看到个不错的网页播放器,感觉不错,大家可以测试 我写的一个播放器网页: ...
由于固态驱动器(SSD)的速度比传统的硬盘驱动器(HDD)快得多,并且价格越来越便宜...
这5个PHP编程中的不良习惯,一定要改掉 PHP世界上最好的语言! 测试循环前数组是...
在大三的时候,一直就想搭建属于自己的一个博客,但由于各种原因,最终都不了了...
首先到这里下载其源码。里面东西挺多的,我们基本上可以把它放到两个文件夹就是...
本文实例为大家分享了javascript实现倒计时提示框的具体代码,供大家参考,具体...
目录 1. C语言文件接口(库函数) 1.1 fopen 1.2 fclose 1.3 fread 1.4 fwrite 1.5...