Docker学习笔记

Docker和虚拟机区别:

虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。
Docker仅仅是封装函数库,并没有模拟完整的操作系统,是一个系统进程

特性Docker虚拟机
性能接近原生性能较差
银盘启动一般为MB一般为GB
启动秒级分钟级

Docker和虚拟机的区别

Docker常用命令

镜像

Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像

docker images 查看所有镜像

docker rmi imagesID 删除id为imagesID 的镜像

docker pull negix:1.20 拉取negix镜像,版本号为1.20,如果没有指定版本就是拉取最新版本

docker push 推荐镜像给仓库

docker save -o ./nginx.tar nginx:1.20 :将nginx 版本为1.20 的镜像打包到当前目录下,打包后的文件名为nginx.tar(名字可以随意)

docker load -i nginx.tar :将nginx.tar加载成镜像文件

docker tar 镜像id 标签:为镜像添加一个新的标签

docker buile 构建镜像

自定义镜像:
当从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  1. 从已经创建的容器中更新镜像,并且提交这个镜像(更新镜像)
  2. 使用 Dockerfile 指令来创建一个新的镜像(Dockerfile文件)

# 执行Dockerfile 生成自定义镜像
# 参数-t 指定要创建的目标镜像名和版本,
# 最后面的参数 . Dockerfile文件所在目录,可以指定Dockerfile的绝对路径
docker buile -t javaweb:1.0 .
# 根据镜像,创建容器并启动(后面有容器的创建命令)
# 镜像id可以通过命令 docker images查看
docker buile --name=myjavaweb -d -p 8090:8090 镜像id

Dockerfile文件必须满足:

  • 每一个指令都会在镜像上创建一个新的层
  • 每一个指令的前缀都必须是大写的
# Dockerfile文件
# 指定基础镜像
FROM centos:7
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

容器

镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。

docker run 创建容器并运行
示例: docker run --name[=]mynginx -d -p 8080:80 nginx:1.20
参数:
–name :容器名字,后面的等于号可以省略
-d :后台运行,否则会霸屏运行
-p: 映射端口号,冒号左侧是暴露给外部访问的端口号,冒号右侧是容器内的端口号,

解释:
依据镜像nginx:1.20,创建名为mynginx的容器,并运行,容器外部访问端口为8080,内部端口为80(nginx的默认端口,建议以默认端口号)
常用软件默认端口号nginx(80),tomacat(8080),mysql(3306),redis(6379)

docker pause mynginx :暂停mynginx

docker unpause mynginx : 从暂停转换为运行

docker stop mynginx: 停止mynginx

docker start mynginx : 启动mynginx

docker logs [-f] mynginx :查看运行日志参数 ,参数 -f 动态读取文件末尾

docker ps [-a][-q] :查看所有运行的容器及状态

  • -a 可查看所有进程
  • -q:只查看CONTAINER ID(运行中的)

docker rm mynginx :删除指定容器(正在运行的无法删除)

docker rm -f mynginx: 强制删除容器,正在运行的也可以被删除

docker exec -it mynginx [/bin] bash :进入mynginx容器

  • docker exec :进入容器内部,执行一个命令
  • -i 交互操作模式
  • -t 终端
  • it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。,进入容器后执行的命令,bash是一个linux终端交互命令,/bin可省略
    进入容器后输入exit退出容器

数据卷:

概念: 数据卷是虚拟目录,数据卷是一种逻辑概念,是虚拟的,并非真实存在,与容器内的文件有映射关系,还指向宿主文件系统中的某个目录
作用:数据解耦(容器与数据分离),可以数据复用,方便数据维护
语法:docker volume [命令]
docker volume create mydata:创建数据卷mydata
docker volume ls:显示所有数据卷
docker volume rm mydata:删除指定数据卷mydata
docker volume prune[-f]:删除未映射文件 数据卷 参数-f :直接删除,不提示
docker volume inspect mydata:查看数据卷详情,可查看数据卷在虚拟机中的路径

#docker volume inspect mydata的结果
[
    {
        "CreatedAt": "2022-10-15T16:55:15+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/mydata/_data",
        "Name": "mydata",
        "Options": {},
        "Scope": "local"
    }
]

挂载:

容器中的数据与宿主数据创建连接
创建容器时增加 -v 参数,有数据卷挂载和目录挂载两种方式
数据卷挂载:中间有数据卷,虚拟目录由docker管理
目录挂载:没有数据卷,虚拟机跟docker容器产生关系,虚拟机的目录由开发者管理

数据卷挂载

docker run --name mynginx 
-v html:/usr/share/nginx/html 
-d -p 8080:80 nginx:1.20

参数说明:

  • –name 容器名 给容器取名 mynginx
  • -v 卷名:容器目录 把数据卷挂载到容器下的指定目录
    (/usr/share/nginx/html目录可以通过docker官方网站查看)
  • -p 主机端口:容器端口 ,把宿主机的端口映射到容器内的端口
  • -d 后台运行

目录挂载:

  • -v 宿主机目录:容器内目录
  • -v 宿主机文件:容器内文件
 # 提前在对应目录下创建mysql.cnf文件,并添加[mysql],否则会创建文件夹mysql.cnf
 echo [myslq] > mysql.cnf
 
 # docker目录挂载方式创建sql 
 docker run -di 
 --name=mysql2 
 -e MYSQL_ROOT_PASSWORD=123456 
 -p 23306:3306 
 -v /root/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf 
 -v /root/mysql/data:/var/lib/mysql 
 mysql:5.7

参数说明:

  • -e MYSQL_ROOT_PASSWORD=123456:
    设置容器的环境变量,设置MySQL root 用户的密码为123456
    链接:参数-e的使用
  • -v 目录挂载时,文件映射文件,文件夹映射文件夹,
    如果没有mysql.cnf文件,会创建一个目录mysql.cnf
# docker数据卷挂载方式创建sql 
docker run --name=mysql3 
-p 33306:3306 
-e MYSQL_ROOT_PASSWORD=123456 
-v conf3:/etc/mysql/conf.d 
-v mysqldata3:/var/lib/mysql -d mysql:5.7

待解决:为啥数据卷挂载和目录挂载目录不一致???
数据卷挂载时,配置文件路径为/etc/mysql/conf.d
目录挂载时,配置文件路径为/etc/mysql/conf.d/mysql.cnf

参考:菜鸟docker教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值