Docker基础学习笔记

Docker是什么

在这里插入图片描述

  • 是一个开源的应用容器引擎,基于go语言开发并遵循apache2.0协议开源
  • 是在Linux容器里运行应用的开源工具
  • 是一种轻量级的 “虚拟机”
  • Docker的容器技术,可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器
  • 市场占有率最高

Docker与虚拟机的区别

Docker虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗 50%左右
性能接近原生弱于
系统支持量(单机)上千个几十个
隔离性通过namespace实现资源隔离,通过cgroup实现限制资源的最大使用量完全隔离,每个虚拟机都有独立的硬件
内核所有容器共享宿主机的内核每个虚拟机都有独立的操作系统和内核

Docker核心

镜像

  • 是创建容器的基础
  • 是一个只读的模板文件,里面包含运行容器中的应用程序所需要的所有资料(比如应用程序执行文件、配置文件、动态库文件、依赖包、系统文件和目录等)

容器

  • 是用镜像运行的实例
  • 容器可以被创建、启动、停止、删除,每个容器之间默认是相互隔离的

仓库

  • 是用来集中保存镜像的地方
  • 有公有仓库和私钥仓库之分

可用Docker镜像源推荐

Docker镜像源1:

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.imgdb.de",
    "https://docker-0.unsee.tech",
    "https://docker.hlmirror.com",
    "https://cjie.eu.org"
    ]
}
EOF

Docker镜像源2:

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
    "https://proxy.1panel.live",
    "https://docker.1ms.run",
    "https://hub.geekery.cn",
    "https://docker.m.daocloud.io",
    "https://docker.rainbond.cc",
    "https://docker.1panel.live"
    ]
}
EOF

一、Docker命令

1、帮助命令

docker version	# 显示docker的详细信息
docker info		# 显示docker的系统信息,包括镜像和容器的数量
docker --help	# docker帮助命令

2、镜像操作命令

2.1、搜索
docker search 关键字
#例如:
docker search nginx
2.2、下载
docker pull 仓库名称[:标签(版本)]
# 如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
docker pull nginx
2.3、查看
# 镜像下载后存放在 /var/lib/docker 。
# Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,其中 containers 目录存放容器信息,image 目录存放镜像信息,overlay2 目录下存放具体的镜像底层文件。
 
#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
 
#查看下载到本地的所有镜像
docker images

docker images -q	# 只查询显示镜像ID

-q 只显示镜像ID

2.4、查看镜像详细信息
docker inspect 镜像ID
# 例如:
docker inspect 6c1a5edb7b09
2.5、复制镜像并且修改名称
docker tag 名称:[标签/版本] 新名称:[新标签/版本]
# 例如:
docker tag nginx:latest nginx:1.27.5
2.6、删除
docker rmi 仓库名称:标签
或者
docker rmi 镜像ID

docker rmi -f $(docker images -aq)	#删除所有镜像

-f 强制删除

-aq 显示所有的镜像ID

3、容器操作命令

3.1、运行
docker run 镜像ID/名称

docker run -d -p 80:80 --name nginx1 a830707172e8

-d 后台运行

-p 端口映射。宿主机端口:容器端口

–name 自定义名称

-i 使用交互方式运行容器,通常与t同时使用

-t 为容器重新分配一个伪输入终端。也即启动交互式容器

-P 随机指定端口

-v 给容器挂载存储卷

3.2、查看
docker ps	# 查看运行中的容器
docker ps -a	# 查看所有的容器,包括停止的容器

docker inspect 容器ID/名称		# 查看容器的详细信息

-a 查看所有的容器,包括停止的容器

3.3、停止
docker stop 容器ID/名称

docker stop cd9309639124
3.4、启动
docker start 容器ID/名称

docker start cd9309639124
3.5、重启
docker restart 容器ID/名称

docker restart cd9309639124
3.6、状态
docker stats 容器ID/名称

docker stats cd9309639124
3.7、日志
docker logs 容器ID/名称

docker logs cd9309639124
3.8、进入
docker exec -it 容器ID/名称 /bin/bash

docker exec -it cd9309639124 /bin/bash

-i 使用交互方式运行容器,通常与t同时使用
-t 为容器重新分配一个伪输入终端。也即启动交互式容器

3.9、删除
docker rm 容器ID/名称

docker rm cd9309639124
docker rm -f cd9309639124	# -f强制删除

4、镜像分享

4.1、提交

将编辑好的容器提交为一个镜像。

docker commit 容器ID/名称

#将编辑好的容器提交为一个镜像。
docker commit cd9309639124 mynginx:1.0
4.2、保存

将镜像保存为一个tar包。

docker save 容器ID/名称

# 将镜像保存为一个tar包
docker save -o mynginx.tar cd9309639124
4.3、加载
docker load

docker load -i mynginx.tar

-i 指定输入文件的路径

4.4、登录
docker login
#输入账号密码

#阿里云
docker login --username=****** crpi-xit86n73o16tvmz6.cn-chengdu.personal.cr.aliyuncs.com
4.5、命名
docker tag 名称:[标签/版本] 新名称:[新标签/版本]
# 例如:
docker tag nginx:latest nginx:1.27.5

#阿里云
docker tag [ImageId] crpi-xit86n73o16tvmz6.cn-chengdu.personal.cr.aliyuncs.com/zxlimage/nginx:[镜像版本号]
4.6、推送
docker push 镜像ID

#阿里云
docker push crpi-xit86n73o16tvmz6.cn-chengdu.personal.cr.aliyuncs.com/zxlimage/nginx:[镜像版本号]

二、Docker存储

1、目录挂载

docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx

# -v /宿主机路径:/容器路径

目录挂载:-v /app/nghtml:/usr/share/nginx/html

2、卷映射

docker run -d -p 80:80 -v ngconf:/etc/nginx --name app01 nginx

# -v 卷名:/容器路径

卷映射 -v ngconf:/etc/nginx

docker中卷默认存放路径: /var/lib/docker/volumes/volume-name

列出所有的卷
docker volume ls

手动增加卷
docker volume create 卷名

查看卷的详情
docker volume inspect 卷名

三、Docker网络

1、默认网络

docker为每个容器分配了唯一ip,使用容器ip+容器端口可以互相访问。

查看容器ip

docker inspect 容器名

在这里插入图片描述

2、自定义网络

# 创建网络
docker network create mynet

# 查看网络
docker network ls

# 启动容器
docker run -d -p 80:80 --name app1 --network mynet nginx

docker run -d -p 81:80 --name app2 --network mynet nginx

创建自定义网络,容器名就是稳定域名

docker exec -it app1 /bin/bash

curl http://app2:80

四、Docker Compose

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

compose.yaml语法:

顶级元素
名字:name
服务:services
网络:networks
卷:volumes
name: myblog
services:
  mysql:
    container_name: mysql
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD: 123456
      - MYSQL_DATABASE: wordpress
    volumes:
      - mysqldata:/var/lib/mysql
      - /app/myconf:/etc/mysql/conf.d
    restart: always
    networks:
      - mynetwork
  
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: 123456
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress:/var/www/html
    restart: always
    network:
      - mynetwork
volumes:
  mysqldata:
  wordpress:
networks:
  mynetwork:

docker compose -f compose.yaml up -d
docker compose up -d	# 配置文件中所有应用以后台形式上线

docker compose down		# 配置文件中所有应用批量下线

docker compose start x1 x2 x3 	# 启动1 2 3应用
docker compose stop x1 x3		# 停止1 3应用
docker compose scale x2=3		# 扩容3个2应用

-f 等价于–file,指定 compose.yaml文件

五、Dockerfile

dockerfile 是一种用于定义和构建 docker 镜像的文本文件。它包含一系列的指令和参数,用于描述镜像的构建过程,包括基础映像、软件包安装、文件拷贝、环境变量设置等。

通过编写 dockerfile,可以将应用程序、环境和依赖项打包成一个独立的容器镜像,使其可以在不同的环境和平台上运行,实现应用程序的可移植性和可扩展性。

1、编写Dockerfile文件

FROM openjdk:17

COPY app.jar /app.jar

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]
常见指令作用
FROM指定镜像基础环境
RUN运行自定义命令
CMD容器启动命令或参数
LABEL自定义标签
EXPOSE指定暴露端口
ENV环境变量
ADD添加文件到镜像
COPY复制文件到镜像
ENTRYPOINT容器固定启动命令
VOLUME数据卷
USER指定用户和用户组
WORKDIR指定默认工作目录
ARG指定构建参数

2、构建镜像

docker build -f Dockerfile -t myjavaapp:1.0 .

-f 等价于–file,指定 dockerfile 文件

-t 等价于–tag,指定输出的镜像文件名:版本号

命令最后一定要加一个.

posted @ 2025-05-20 17:34  叶小格  阅读(0)  评论(0)    收藏  举报  来源