一 容器与镜像的基础命令
docker run -it centos bash 进入一个centos 容器命令 进入交互模式
docker run -d centos 后台启动
问题 会发现centos 停止了
docker 容器使用后台运行,就必须有一个前台程序,docker没有发现前台应用的时候会发现centos停止了
exit 退出并停止容器
ctrl + P +Q 只是退出容器
docker rm 容器id 删除指定容器
docker rm -f $(docker ps -aq) 删除所有的容器
docker start 容器id 启动一个容器
dicker restart 容器id 重启一个容器
docker stop 容器id 停止一个容器
docker kill 容器id 强制停止当前容器
docker top 容器id 查看容器里的进程
[重要]docker inspect 容器id 查看容器的元数据
docker exec -it 4ccb6627930a bash 进入已运行的容器的命令 开始一个新的终端 可以在里面才做
docker attach 4ccb6627930a 进入已运行的容器的命令 进入容器当前的终端,不会进入一个新的终端
docker cp 容器id:容器内路径 目的主机路径 文件从容器里拷贝到目的主机路径
案例一 docker 部署nginx
docker run -d --name nginx01 -p 8080:80 nginx 运行一个端口映射为8080的nginx
参数说明:
-d 后台运行
--name 起一个名字
-p 暴露的端口
本机访问http://localhost:8080/ 可查看部署是否成功
案例二 docker部署一个tomcat
用完即删除
docker run -it -rm tomcat:9.0
docker run -d --name tomcat01 -p 3355:8080 tomcat
有以下问题:
映射的3355 端口访问的时候 不会出现tomcat而是404
webapps目录下的都是空的 因为是阿里云镜像的原因
解决办法
cp -r webapps.dist/* webapps 将dist目录下的都拷贝到webapp下
项目的部署 每次都要进去nginx都会非常麻烦 ,我们在容器外部提供一个映射路径,webapps,在外部放置项目,就可以自动同步就ok了
案例三 docker 上部署es和kibana
es暴露的端口很多
es 十分的消耗内存
es 的数据一般都需要放置到安全目录 也就是宿主机里 挂载技术
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.12.0 参数说明: --net somenetwork 网络配置 可暂时忽略 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"* -e ES_JAVA_OPTS="-Xms2g -Xmx2g" elasticsearch:7.12.0 -e ES_JAVA_OPTS="-Xms2g -Xmx2g" 配置文件中设置堆内存
二 数据卷
将centos的home目录挂载到本机的D盘下的docker目录下
双向绑定
docker run -it -v D:\docker:/home centos bash
docker inspect 容器id 通过下面的mounts 查看是否挂载成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P2gVlcWC-1619703023221)(C:\Users\HQ-F\AppData\Roaming\Typora\typora-user-images\image-20210414235410945.png)]
实战案例【mysql数据同步】:
-v 容器内路径 匿名挂载
-v 卷名:容器内路径 具名 挂载
-v 宿主机路径:容器内路径 指定路径挂载
2.1 指定路径挂碍
挂载的目录 G:\mysql\conf 一定要携程 /G/mysql/conf 不然链接的时候会出现一些错导致连接不上
docker run -d -p 3310:3306 -v /G/mysql/conf:/etc/mysql/conf.d -v /G/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=142212 -d mysql:5.7
2.2 匿名挂载
-v 容器路径
-P 随机映射端口
docker run -it -d -P --name nginx -v /etc/nginx nginx
查看所有的 volume 的情况
docker volume ls
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zd2Ck9A0-1619703023231)(C:\Users\HQ-F\AppData\Roaming\Typora\typora-user-images\image-20210418131143781.png)]
查看匿名挂载目录的外路径
docker volume inspect volume_name
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kruyH6aU-1619703023232)(C:\Users\HQ-F\AppData\Roaming\Typora\typora-user-images\image-20210418131532255.png)]
拓展:
通过 -v 容器内路径:ro/rw 改变读写权限
ro readonly 只读 一旦设定了 容器内路径权限 容器对我们挂出来的内容就有限定了 只能从宿主机进行读写操作 不能从容器内进行写操作
rw readwrite 可读可写(默认的)
三 DockerFile
3.1 介绍:
1、 每个保留关键字(指令) 都必须是大写字母
2、 执行从上到下
3、# 表示注释
4、每一个指令都会创建提交一个新的镜像曾,并提交
3.2 DockerFile的指令
FROM # 基础镜像,一切从这里开始
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN # 镜像的构建需要运行的命令
ADD # 步骤,tomcat镜像 这个tomcat的压缩吧就是需要add进去的内容
WORKDIR # 镜像的工作目录 /bin 或者 /bin/bash
VOLUME # 挂载的目录
EXPOSE # 暴露的端口
CMD # 指定这个容器启动的时候要运行的命令 只有最后一个会生效,可被替代
ENTERYPOINT # 指定这个容器启动的时候要运行的命令 可以追加命令
ONBUILD # 触发指令
COPY # 类似ADD,将我们的文件拷贝到镜像
ENV # 构建的时候设置环境变量
3.3 DockerFile 就是构建docker镜像的构建文件 命令脚本 没有后缀名
dockerfile:
FROM centos
VOLUME [“volume01”,“volume02”]
CMD echo “-------end-------”
CMD /bin/bash
构建命令
【注意】后面有一个点
docker build -f G:\docker-file-volume\dockerfile -t hq/centos:1.0 .
3.4 DockerFile实战测试 构建一个centos
FROM scratch #scratch 是一个最基础的镜像 ,99%的镜像都来自他
1 编写dockerfile文件
FROM centos
MAINTAINER hq1422127065@qq.comEVN MYPATH / #就是centos进去后的当前目录定义
WORKDIR $MYPATHRUN yum -y install vim
RUN yum -y install net-toolsEXPOSE 80
CMD echo $MYPATH
CMD echo “—dnd----”
CMD /bin/bash
-
构建dockerfile
docker build -f C:\Users\HQ-F\Desktop\centos -t centos2.0
四 数据卷容器
容器之间的同步 (数据卷的同步)
–volumes-from 主容器
这里我们启动我们自己制作的镜像
实现步骤1 、启动一个centos容器
docker run -it --name centos1 hq/centos:1.0
实现步骤2、再启动一个容器实现数据卷的挂载
docker run -it --name centos2 --volumes-from centos1 hq/centos:1.0
检验步骤:
在主容器中的两个数据卷中新建一个文件 然后在次容器中的数据卷中进行查看
同理 次容器数据卷中有任何的改变 主容器一样会进行同步