docker快速上手

Docker快速上手笔记 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 阅读详情

docker

  • 容器类似轻量级的虚拟机
  • 容器共享操作系统的内核
  • 容器拥有自己的文件系统、cpu、内存、进程空间等资源
  • 容器间相互隔离
  • 每个容器都可以看作是一个简易虚拟机
  • 官方文档:https://docs.docker.com/manuals/
  • 官方社区:https://hub.docker.com/

docker安装

此处以centos为例,其他操作系统和安装方式参考官方文档

  1. 卸载旧版本
sudo dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  1. 配置docker yum源(存储库)
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 安装docker
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 启动并设置开机启动docker
sudo systemctl enable --now docker
  1. 检验docker是否安装成功
sudo docker ps #该命令可以查看当前运行的容器
  1. 配置docker下载镜像地址为腾讯云
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://mirror.ccs.tencentyun.com",
        "https://docker.m.daocloud.io"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

常用docker命令

镜像相关

  • 搜索镜像
    • docker search nginx
  • 下载镜像
    • docker pull nginx[:版本名称]
    • 这里如果不指定版本名称则默认下载最新版本
    • 要下载指定版本的镜像可以去dockerhub查找
  • 查看所有镜像
    • docker images
  • 删除指定id的镜像
    • docker rmi 镜像ID

容器相关

  • 查看运行中的容器
    • docker ps [-a]
    • 参数-a可以查看所有容器,包括未运行的
  • 运行一个新容器
    • docker run [-d] [--name 别名] [-p 端口映射] 容器名/容器id
    • -d可以让容器后台启动
    • --name为该容器起一个别名
    • -p指定物理机与docker之间接口映射
      • 例如80:80,将物理机80端口(外部端口)映射到容器的80端口(内部端口)
      • 注意,在docker中的各个容器使用的内部端口是容器自身的,故不同容器间可以有重复的内部端口(如容器A使用80端口,容器B也可以使用80端口,但是设置端口映射时外部端口必须唯一)
  • 进入容器内部
    • docker exec -it 容器名/容器id /bin/bash
    • -it表示以交互模式进入
    • /bin/bash表示以控制台进入
  • 停止容器
    • docker stop 容器名/容器id
  • 启动容器
    • docker start 容器名/容器id
  • 重启容器
    • docker restart 容器名/容器id
  • 查看容器资源占用情况
    • docker stats 容器名/容器id
  • 查看容器日志
    • docker logs 容器名/容器id
  • 删除指定容器
    • docker rm [-f] 容器名/容器id
    • 通常情况下删除容器需要先停止该容器
    • -f参数可以不停止,强制删除

持久化相关

  • 提交容器变化打包成一个新的镜像
    • docker commit [-m "提交信息"] 容器名 镜像:版本号
    • -m参数可以为此次打包添加自定义信息
  • 保存镜像为指定文件
    • docker save [-o 镜像文件名] 镜像:版本号
    • -o参数可以指定生成的文件名称
    • 这里是将镜像打包成一个tar包(压缩包)以便于传输
  • 删除多个镜像
    • docker rmi 镜像id [镜像id ...]
  • 加载镜像
    • docker load -i 镜像文件名

社区分享相关

  • 登录 docker hub
    • docker login
  • 重新给镜像打标签
    • docker tag 原镜像名 新镜像名
    • dockerhub上的镜像通常以 用户名/镜像名:版本名 进行命名
  • 推送镜像
    • docker push 镜像名

docker存储

这里为了方便理解,我们可以将目录挂载看作是软连接,即目录挂载是通过类似"快捷方式"来引用宿主机上的目录/文件;同样的卷映射可以看作是硬链接,即卷映射是将容器内的目录/文件"拷贝"了一份放到卷中,并且docker会保证容器内数据与卷中数据一致

目录挂载

  • 为了方便管理容器中应用的数据和配置,可以使用目录挂载来指定一个目录,将该目录作为目标容器中的某一个目录。
  • 当容器重新部署,容器内的数据也不会丢失(数据在被挂载的目录中)
  • 宿主机和容器之间的文件修改会实时同步。
  • 通常使用在开发环境
  • docker run -v /宿主机路径:/容器路径 镜像名称
# 1假定已经在/app/mynginxhtml下创建了一个index.html文件作为欢迎页
# 2创建一个容器
# 后台启动,端口映射为80到80,别名为mynginx
# 此处的/usr/share/nginx/html目录是容器中nginx存放欢迎页的目录
docker run -d -p 80:80 -v /app/mynginxhtml:/usr/share/nginx/html --name mynginx nginx

# 3删除上面创建的容器
docker rm -f mynginx

# 4重起一个容器,但是挂载同一目录
docker run -d -p 80:80 -v /app/mynginxhtml:/usr/share/nginx/html --name mynginx nginx

# 此时,前一个容器和后一个容器会有相同的欢迎页(数据被保存了)

卷映射

  • 使用目录挂载配置文件时,可能会出现配置文件不存在的情况(没有事先将配置文件存放到指定目录下),此时需要使用到卷映射。

  • 使用卷映射时docker会在宿主机的特定位置(通常是 /var/lib/docker/volumes/)创建一个卷,并将其挂载到容器中

  • 卷的生命周期独立于容器,不会由于容器的删除而删除

  • 通常使用在需要持久化的生产环境

  • docker run -v 卷名称:/容器路径 镜像名称

    • 创建一个新容器,并开启卷映射
    • 使用该命令若卷不存在docker会自动创建一个卷
  • docker volume ls

    • 查看docker中存在的卷
  • docker volume create 卷名

    • 创建一个新卷
  • docker volume inspect 卷名

    • 查看指定卷的详情
# 创建一个卷名为nginxconfig的卷并映射到容器的/etc/nginx目录
docker run -v nginxconfig:/etc/nginx --name mynginxconfig nginx
# 切换到卷目录下,这里之间在特定位置后面加卷名
# 此时会发现一个_data目录,里面存放了容器中/etc/nginx目录中的全部内容
cd /var/lib/docker/volumes/nginxconfig

docker网络

容器间通信

  1. 通过物理机ip和端口进行通信
    1. 此种通信方式是由发起方先向物理机发起请求,再从物理机访问到目标容器
# 创建2个容器应用
docker run -d -p 81:80 --name nginx1 nginx
docker run -d -p 82:80 --name nginx2 nginx
# 进入nginx1通过物理机ip(192.168.0.2)和端口访问nginx2
docker exec -it nginx1 bash
curl http://192.168.0.2:82
  1. 通过容器内部网络ip和端口进行通信
    1. 默认情况下docker会创建一个bridge网络
    2. 当创建容器时,docker会将该容器加入此网络
    3. 在该模式下,每个容器会分配一个独立的网络命名空间,并通过虚拟网桥docker0连接到主机网络
# 创建2个容器应用
docker run -d -p 81:80 --name nginx1 nginx
docker run -d -p 82:80 --name nginx2 nginx
# 获取目标容器ip
docker container inspect nginx2
# 进入nginx1通过内部网络访问nginx2(假设内部ip为172.17.0.2)
docker exec -it nginx1 bash
curl http://172.17.0.2:80
  1. 通过自定义网络使用容器名进行通信
    1. 默认情况下(即docker0)不支持使用主机域名来访问不同容器
    2. 我们需要创建一个自定义网络,将容器名设置为主机域名来进行访问
# 创建自定义网络
docker network create mynet
# 创建2个容器应用
# 这里的--network用于指定要加入的网络,不指定则会默认加入nginx0网络
# 同时会将容器名作为该容器主机的域名
docker run -d -p 81:80 --name nginx1 --network mynet nginx
docker run -d -p 82:80 --name nginx2 --network mynet nginx
# 通过域名访问目标容器应用
docker exec -it nginx1 bash
curl http://nginx2:80

创建单机的docker-redis集群

这里使用了docker compose,下一节会介绍

  1. 创建docker-compose.yml文件
# 指定版本号
version: '3.8'

services:
# 配置主服务器
  redis-master:
    #指定镜像为最新镜像
    image: redis:latest
    #设置主服务器名
    container_name: redis-master
    #设置端口映射
    ports:
      - "6379:6379"
    #设置目录挂载
    volumes:
      - ./redis-master-data:/data
    #启动redis服务器并启用AOF持久化
    command: redis-server --appendonly yes
# 配置从服务器
  redis-slave:
    image: redis:latest
    container_name: redis-slave
    ports:
      - "6380:6379"
    volumes:
      - ./redis-slave-data:/data
    # 启动redis服务并配置为redis-master的从节点
    command: redis-server --appendonly yes --slaveof redis-master 6379
    #指定在redis-master启动后才启动
    depends_on:
      - redis-master
  1. 启动redis集群
# 在docker-compose.yml文件目录中运行
docker compose -f docker-compose.yaml up -d

docker compose

官方文档非常详尽,可直接访问https://docs.docker.com/reference/compose-file/

使用docker compose创建一个wordpress博客

wordpress-compose.yaml

name: myblog

services:
  mysql:
    container_name: mysql
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD: 123456
      - MYSQL_DATABASE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
      - /ap/myconf:/etc/mysql/conf.d
    restart: always
    networks:
      - blog

  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
    networks:
      - blog
    depends_on:
      - mysql

volumes:
  mysql-data:
  wordpress:

networks:
  blog:  
  • 启动容器
    • docker compose -f wordpress-compose.yaml up -d
    • 若是使用该配置文件重新启动容器,docker会先判断yaml文件是否有修改,若其中某个容器发生了修改,则会重启发生修改了的。
  • 关闭容器
    • docker compose -f wordpress-compose.yaml down [--rmi local|all] [-v]
    • 该命令不会移除容器所占用的卷,在下次启动时同样也会引用这些卷
    • --rmi
      • 用以删除镜像
      • local选项用以删除没有自定义标签的镜像
      • all选项用以删除所有镜像
    • -v
      • 用以删除在该yaml文件中申明的卷

dockerfile自定义镜像

常见指令

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

自定义java镜像

  1. 将java程序打包成jar包(假定为app.jar),并上传到服务器
  2. 使用vim命令创建一个dockerfile文件
FROM openjdk:17
LABEL hello word
EXPOSE 8080
COPY app.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  1. 构建镜像
    1. docker build -f dockerfile -t helloword:v1.0 ./
    2. 这里的-f用于指定dockerfile文件
    3. -t用于给该镜像添加tag
    4. ./用于指定执行的上下文目录,这里是在dockerfile文件所在目录执行的所以为当前目录
Docker快速上手教程 Docker 入门详解一、Docker介绍二、Docker的安装1. 下载Docker依赖环境2. 指定Docker镜像源3. 安装Docker4. 启动Docker并测试三、Docker的中央仓库四、Docker镜像操作1. 拉去镜像2. 查看本地镜像3. 删除本地镜像4. 镜像的导入导出五、Docker容器操作1. 启动容器2. 查看正在运行的容器3. 查看容器的日志4. 进入容器的内部5. 复制内容到容器中6. 重启-启动-停止-删除容器六、Docker数据卷1. 创建数据卷2. 查看数据卷详情3. 阅读详情

相关推荐

【3D目标检测】MMdetection3d——搭建IS-Fusion环境+nuScenes数据集训练

搭建IS-Fusion环境+nuScenes数据集训练

qq_44703886的博客 2323

Docker快速上手

通过 Docker,你可以轻松构建、部署和管理应用程序,同时保证环境一致性。学习 Docker 的基本命令和概念,将使你在开发、测试和部署过程中更加高效。掌握容器技术将使你能够更好地适应现代 DevOps 和云计算环境。

m0_62012279的博客 1904

非华为电脑与MatePad Pro多屏协同实战:从安装管家到攻克连接难题

本文详细介绍了在非华为电脑上安装华为电脑管家并实现与MatePad Pro多屏协同的完整指南。从安装步骤、常见连接失败解决方案到华为账号绑定技巧,提供了实用的操作方法和硬件优化建议,帮助用户攻克连接难题,提升多屏协同的稳定性和流畅度。

weixin_30263073的博客 233

Docker 快速上手总结

Docker 快速上手总结 形象且简洁 一目了然清楚Docker逻辑和基本操作

2501_92745786的博客 135

R语言笔记三:矩阵、数组、列表和数据框

1.矩阵        矩阵是二维的,需要有行和列。向量是一维的。        在R软件中,矩阵是有维数的向量,这里的矩阵元素可以是数值型、字符型或者逻辑型,但是每个元素必须拥有相同的模式,这个和向量一致。 (1)创建矩阵: m <- matrix(1:20,4,5) 行数和列数的分配必须满足分配条件。若分配的行列过大,分配的元素不足够,则报错。 m <-

weixin_44384631的博客 6210

遥感图像地物覆盖分类,数据集制作-分类模型对比-分类保姆级教程

1.新建shp文件地理坐标系保持和影像一致,面类型2.打开属性表3.添加字段这里分类6类,点击添加值添加添加完毕开始人工选地物类型,制作数据集开始标注,标注的时候可以借助谷歌地图来看标记足够多的样本打开面转栅格工具设置nodata值为15。

热爱分享,热爱记录 2524

快速上手docker

示例命令表示:使用镜像httpd,以交互模式启动一个容器,将容器的80端口映射到宿主机的80端口,宿主机的目录/data映射到容器的/var/www/httpd目录,并返回容器ID。此处以Apache和CentOS官方镜像为例,由于国内禁止了docker官方镜像源,此处指定华为云官方镜像。-v:把宿主机上的一个目录挂载到镜像里,格式为“宿主机目录:镜像内挂载的路径”,必须为绝对路径。使用docker拉取指定镜像,创建容器并运行,并测试容器运行情况。-t:为容器重新分配一个伪输入终端,通常与-i同时使用。

Mooczx的博客 902

Autosar MCAL-S32K324 Fee配置-基于EB

Autosar MCAL S32K324 Fee配置详解

赞的博客 1544

快速上手docker【持续更新知识】

docker核心知识,命令及原理【持续更新】

_zhy_cq 1274

教师模型与学生模型:知识蒸馏的核心概念

知识蒸馏,教师模型,学生模型,模型压缩,迁移学习,深度学习 1. 背景介绍 深度学习模型在图像识别、自然语言处理等领域取得了显著的成就,但其巨大的模型规模和高昂的计算成本限制了其在资源有限的设备上的部署。知识蒸馏(Knowledge Distillation)作为一种模型压缩技术,旨

AI架构师小马 2770

基于ESP32的智能无线广播系统开发博客

通过本项目的开发,我们成功地实现了基于ESP32的智能无线广播系统。该系统不仅具备传统广播的功能,还实现了通过Wi-Fi无线传输音频、实时广播和智能控制等多种先进功能。未来,随着技术的进一步发展,我们还可以扩展更多功能,如智能推荐广播内容、支持语音识别和控制等。希望本项目能够为嵌入式开发人员提供一些思路和参考,帮助大家在实际开发中更好地应用ESP32平台,开发出更加智能和实用的无线广播系统。

2201_76125393的博客 423

Docker 快速上手

数据卷是宿主机中的一个目录或文件。容器目录和数据卷目录绑定后,对方修改会立即同步。一个数据卷可被多个容器同时挂载,一个容器也可挂载多个数据卷。

2402_82958989的博客 681

[Unity开发] [PICO]避坑指南:PICO商店上传APP时PXR Platform APPID设定详解

PICO开发者上传Unity应用时常见的"APPID不符"问题,主要源于混淆了开发者后台两个不同位置的APPID。

每日出拳老爷子的博客 555

docker快速上手笔记

原版的可以到我的githup下载。

pedestrian_h的博客 313

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

快速上手实践Docker的具体步骤和建议

通过以上步骤,您可以在1小时内完成Docker从安装到实战部署的全流程。,遇到问题时优先查阅官方文档或社区资源,逐步积累经验。

weixin_51782176的博客 920

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

带你快速上手docker

带你快速上手Docker 前言: 接触Docker半年了吧,觉得这技术挺有意思的,也很实用,所以想跟大家分享一下。本文主要目的是以最快的方式带领没接触过Docker的小伙伴迅速掌握几个方便、快捷的Docker命令,然后可以简单的用这些命令进行靶机、实验环境的搭建。重点是快速上手,所以不会讲太多理论。希望大佬们不要笑。 首先需要了解2点: 1...

WannaCry_reboot 301

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

docker快速上手使用

在项目开发阶段经常听到一句话:代码在我这里跑正常,为什么在你的机器上就出bug?docker就是为了解决此问题诞生,将整个环境打包一起交付,这样保证开发环境、测试环境、正式环境都是一样的,避免因为环境不一致而产生不必要的问题。docker是基于go语言实现的开源项目,主要理念是:Build、ship and run any app,anywhere(在任何地方构建、发布、并运行任何项目)。docker是解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

Mculover666的博客(嵌入式) 3114

Podman 快速上手指南:替代 Docker 的新选择

Podman(Pod Manager)是一个无守护进程(daemonless)的容器引擎,用于开发、管理和运行 OCI(Open Container Initiative)容器。无守护进程:Podman 不依赖后台守护进程,直接以用户权限运行容器,减少安全风险。兼容 Docker:Podman 支持 Docker 命令行接口(CLI),可以无缝迁移现有 Docker 工作流。支持 Pods:Podman 引入了 Kubernetes 风格的 Pod 概念,允许在同一 Pod 中运行多个容器。

混迹自留地 4832

Docker 基础篇之快速上手【一】

本篇参考自哔哩哔哩尚硅谷官网 Docker 教程 Docker 基础篇之快速上手【一】1. 使用 Docker 的前提说明1.1 查看自己的内核2. Docker 三要素2.1 镜像【image】2.2 容器【Container】2.3 仓库【Repository】3 Docker 安装3.1 CentOS 6.8 安装 Docker3.2 CentOS 7 安装 Docker4. Docke...

永远年轻 1607

一文带你快速上手docker compose

一文带你快速上手docker compose

weixin_45642975的博客 1166

Docker 快速上手笔记

Docker 快速上手的学习笔记

萌宅鹿的技术小屋 2759
上一篇: java函数式编程基础
下一篇: git快速上手
sisyphoslee
博客等级 码龄7年 942粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值