【docker】文档 [不断补充中...]

2023-11-19

全栈技术分享,文档API化,简单易懂,快速入门,动手党福音,跨界佬福利,直接搞技术,不背八股文

觉得对你有帮助的话点个赞吧,感兴趣的加关注,收藏书签方便随时查阅,同文档会不定期更新补充,有问题欢迎留言讨论

虚拟化

一种资源管理技术,硬件资源不可分割,利用虚拟化技术能最大化利用硬件资源,也就是一硬件多软件部署

docker

概念与本质

使用Go语言开发,基于Linux内核的虚拟机容器化应用软件

对进程进行封装隔离,属于操作系统层面的虚拟化技术

客户端-服务器(C/S)架构程序:docker,dockerd - docker deamon

与虚拟机区别:在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,虚拟机则是在硬件层面实现

docker对比传统虚拟化优点

1.更高效的利用系统资源
2.更快速的启动时间
    直接运行于宿主内核,无需启动完整的操作系统
3.一致的运行环境
4.持续交付和部署
5.更轻松的迁移
6.更轻松的维护和扩展

组件

组件 说明
docker server docker daemon
docker client docker命令,如docker run …
image 镜像,即 unix系统镜像(便于理解) + app运行所需环境(通过Dockerfile布置) + app源码
container 容器,即 unix系统实例 + app实例
Registry 仓库,存放镜像的仓库,类似maven的nexus私服
线上仓库: docker hub
私服仓库: registry

工作流程

app代码 + Dockerfile
docker build Dockerfile
image
docker run image
container

安装

Linux 环境(这里选Ubuntu)

官方教程

碰到问题参考下面的问题和解决

Windows11 环境

官方教程

下载 docker desktop

docker + wsl2 官方教程

docker desktop初始化配置
general:勾选wsl,一般是默认勾选的
resources:wsl integration: 
    enable integration with my default wsl distro
    enbale ubuntu-22.04(这两个选择很重要)

docker engine:加入镜像配置:
,
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://xxx.mirror.aliyuncs.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://reg-mirror.qiniu.com"
  ]

ps:阿里云镜像得配置自己的地址

可能碰到的问题和解决方法:

1. 没有Hyper-v,管理员身份执行脚本:
pushd "%~dp0"
 
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
 
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
 
del hyper-v.txt

Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
2. wsl 环境问题:
win11 + wsl2 + Ubuntu22 : wslg较稳定,已支持开启systemd,不开启systemd前提下支持安装ubuntu-desktop gnome:
    vim /etc/wsl.conf
    [boot]
    systemd=true

win10 + wsl2 + Ubuntu20:支持脚本开启systemd,不开启systemd前提下支持安装ubuntu-desktop gnome
但是gnome >=3.34版本完全基于systemd,存在兼容问题,需要安装低版本的gnome
    开启systemd脚本:https://github.com/nullpo-head/wsl-distrod
    或者:
    systemd环境:
    git clone https://github.com/DamionGans/ubuntu-wsl2-system-script.git
    cd ubuntu-wsl2-system-script/
    bash ubuntu-wsl2-system-script.sh

win10 + distrod: 自带systemd的ubuntu-22.04 wsl系统,不支持安装ubuntu-desktop gnome

distrod下载地址

distrod参考教程

3. 修改挂载c盘目录(不建议,因为修改后目前的目录挂载会存在问题)
新建 /etc/wsl.conf文件输入:

[automount]
root = /
options = "metadata,umask=22,fmask=11"

关闭所有终端,用管理员方式打开cmd或powershell
net stop LxssManager
net start LxssManager
4. 安装docker-ce报错
错误提示1: Sub-process /usr/bin/dpkg returned an error code (1)

由于dpkg目录导致的,备份并重建
sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/bak/  
sudo mkdir /var/lib/dpkg/info/

最后再执行 sudo apt-get update
错误提示2:启动docker失败,提示查看日志:
See "systemctl status docker.service" and "journalctl -xeu docker.service" for details.

正常查看日志内容不全,使用其他命令:
journalctl -fu docker

发现原因:...unable to add return rule in DOCKER-ISOLATION-STAGE-1 chain:  (iptables failed: iptables ...

由于新的ubuntu系统使用了iptables-nft,而WSL2不支持导致的,进行修改:

sudo update-alternatives --config iptables
选择非nft的选项

重启docker即可
5. 安装gnome

参考教程

镜像源最好选清华源
1.安装software-properties-common
报错 /usr/.../dpkg error code
原因:/var/lib/dpkg/info下的包有问题,备份该目录,删掉重新安装软件包

mv /var/lib/dpkg/info /var/lib/dpkg/info.bak
mkdir /var/lib/dpkg/info
apt-get -f install software-properties-common
apt-get update
sudo apt update && sudo apt upgrade -y
#多线程下载工具
sudo apt install axel
#提速工具
sudo add-apt-repository ppa:apt-fast/stable
sudo apt -y install apt-fast
选择:1.apt 2.5 3.yes
#配置apt-fast镜像源,打开注释的第一个镜像(有两行)
sudo vim /etc/apt-fast.conf
#下载桌面
sudo apt-fast install ubuntu-desktop gnome

#这里是修改gnome-session连接window的ip配置
vim ~/.bashrc末尾加入
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
export LIBGL_ALWAYS_INDIRECT=1

systemd环境:
git clone https://github.com/DamionGans/ubuntu-wsl2-system-script.git
cd ubuntu-wsl2-system-script/
bash ubuntu-wsl2-system-script.sh
重启 wsl --shutdown

# micro store 安装vcxsrv
防火墙配置允许vcxsrv通过
1.选one large window ,display num=0
2.下一步
3.勾选display...
4.保存配置

在ubuntu终端输入 gnome-session等待连接启动GUI
# 通过xrdp远程连接方式:
sudo apt-get install xrdp
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
echo "gnome-session" > ~/.xsession
sudo systemctl restart xrdp
sudo systemctl status xrdp

win+r输入mstsc
连接localhost:3390即可

api

ps:配置用户进docker用户组,方便该用户下执行docker命令不用sudo
usermod -G docker xxx

官方文档

1. docker

docker build
作用 构建镜像
格式 docker build [OPTIONS] PATH | URL | -
示例 进入Dockerfile所在目录,执行docker build .
option -f 指定编译文件名,默认是'PATH/Dockerfile'
docker run
作用 生成镜像容器
格式 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
示例 docker run --name nginx \
-v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /nginx/conf/conf.d/:/etc/nginx/conf.d \
-v /nginx/html/:/usr/share/nginx/html \
-v /nginx/log/:/var/log/nginx:ro \
-p 80:80 --privileged=true -d nginx
option -v :[:ro] 挂载目录
将容器内卷与docker服务器卷绑定
ro是只读
注意赋予最高权限777,防止同步出现问题
-d 后台运行
-p :[/proto] 绑定docker服务端口与容器端口
--name 容器名
--rm 退出容器时自动删除容器
--restart<=always|no> 退出容器后重启
-w 进入容器时的当前目录
--privileged 赋予容器扩容特权
-i 保持输入命令,-it:进入容器内终端的意思
-t 打开容器终端
--expose 暴露容器端口
docker cp
作用 从容器内拷贝或拷贝进容器
格式 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
示例 docker cp CONTAINER:/var/logs/ /tmp/app_logs
docker cp ./some_file CONTAINER:/work
option -a 拷贝文件的mode权限
-L 拷贝软链接
docker inspect
作用 列出镜像或容器详细信息
格式 docker inspect [OPTIONS] NAME|ID [NAME|ID...]
示例 docker inspect --format="{{.Mounts}}" CONTAINER
option --format|-f 格式化显示,如--format="{{.Mounts}}"
1.1 docker image
docker images | docker image ls
作用 列出镜像
格式 docker image ls [OPTIONS] [REPOSITORY[:TAG]]
示例 docker image ls -a
option -a 显示所有镜像(默认不包括中间镜像)
--digests 显示摘要,digest:sha256:...,是inspect中的id
--no-trunc 显示完整的镜像信息,即显示完整的Image ID(digest)
-q 只显示id
-f|--filter 过滤
dangling=(true|false): 标记为空的镜像
label= or label==: 按label过滤
since=([:tag]||
1.2 docker container
docker ps | docker container ls
作用 列出容器
格式 docker ps [OPTIONS]
示例 docker ps -a
option -a 列出所有运行中容器
--digests 显示摘要,digest:sha256:...,是inspect中的id
--no-trunc 显示完整的镜像信息,即显示完整的Image ID(digest)
-q 只显示id
-f|--filter 过滤,
id 容器id
name 容器名
label 标签, or =
exited 已退出的容器
status 状态:created, restarting, running, removing, paused, exited, dead
ancestor 原型:[:], , or
1.3 docker volume
docker volume ls
作用 列出卷
格式 docker volume ls [OPTIONS]
示例 docker volume ls -q
option -q 只显示卷名
-f 过滤,如'dangling=true'
--format 格式化显示
docker volume rm
作用 删除卷
格式 docker volume rm [OPTIONS] VOLUME [VOLUME...]
示例 docker volume rm VOLUME
option -f 强制删除
常用容器部署

镜像仓库地址

所有挂载目录统一授予权限,防止奇怪的问题发生
chmod -R 777 /xxx/xxx
nginx
docker run --name nginx \
-v /usr/local/software/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/software/nginx/conf/conf.d/:/etc/nginx/conf.d \
-v /usr/local/software/nginx/html/:/usr/share/nginx/html \
-v /usr/local/software/nginx/log/:/var/log/nginx \
-p 80:80 --privileged=true -d nginx   
删除镜像和容器
可根据镜像或容器的 ID、name、tag 删除
stop container
rm container and volume
rmi image
彻底删除有依赖的none镜像
停止容器
docker images -a | grep none | awk '{print " -f ancestor="$3}' | xargs docker ps -aq | xargs docker stop

删除容器和卷
docker images -a | grep none | awk '{print " -f ancestor="$3}' | xargs docker ps -aq | xargs docker rm -v
删除容器保留卷
docker images -a | grep none | awk '{print " -f ancestor="$3}' | xargs docker ps -aq | xargs docker rm

删除镜像
docker images -a | grep none | awk '{print " -f since="$3}' | xargs docker images -aq | xargs docker rmi

2. Dockerfile

示例
FROM localhost:5000/openjdk:8
MAINTAINER evef
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 APP_HOME=/opt/hello-app
VOLUME /tmp
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD target/hello-docker-0.0.1-SNAPSHOT.jar hello-app.jar
ADD target/classes/application.yml conf/application.yml
ENTRYPOINT java -jar hello-app.jar --spring.config.location=conf/application.yml
EXPOSE 8082
FROM
作用 拉取依赖的镜像
格式 FROM [--platform=] [AS ]
FROM Learn more about the "FROM" Dockerfile command. [--platform=] [:] [AS ]
FROM Learn more about the "FROM" Dockerfile command. [--platform=] [@] [AS ]
示例 FROM localhost:5000/openjdk:8
MAINTAINER(deprecated)
作用 作者
格式 MAINTAINER
示例 MAINTAINER evef
ENV
作用 环境变量
格式 ENV = ...
示例 ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 APP_HOME=/opt/hello-app
VOLUME
作用 创建一个挂载外部卷的挂载点
格式 VOLUME ["/data"]
示例 VOLUME /tmp
就是把容器内的/tmp目录挂载绑定外部docker服务器随机创建的卷
RUN
作用 在容器内执行命令
格式 RUN
示例 RUN mkdir -p $APP_HOME
WORKDIR
作用 指定进入容器的位置,即当前目录
指定目录不存在不会立即创建,最好提前建好目录
格式 WORKDIR /path/to/workdir
示例 WORKDIR $APP_HOME
ADD
作用 拷贝Dockerfile所在位置的资源进入容器内,支持远程拷贝
格式 ADD [--chown=:] ...
ADD [--chown=:] ["",... ""]
示例 ADD target/hello-docker-0.0.1-SNAPSHOT.jar hello-app.jar
COPY
作用 拷贝Dockerfile所在位置的资源进入容器内,只能拷贝宿主机
格式 COPY [--chown=:] ...
COPY [--chown=:] ["",... ""]
示例 COPY target/hello-docker-0.0.1-SNAPSHOT.jar hello-app.jar
ENTRYPOINT
作用 执行shell命令
格式 ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
示例 ENTRYPOINT java -jar hello-app.jar --spring.config.location=conf/application.yml
EXPOSE
作用 暴露端口
格式 EXPOSE [/...]
示例 EXPOSE 8082

3.docker compose

示例
services:
  #服务名
  backend:
    #容器名
    container_name: hello-compose
    build:
      context: ./
      #指定编译文件
      dockerfile: Dockerfile
    # 绑定端口 -p
    ports:
      - 8082:8082
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【docker】文档 [不断补充中...] 的相关文章

随机推荐

  • 基础算法题——画树(卡特兰数)

    卡特兰数简介 卡特兰数又称卡塔兰数 英文名Catalan number 是组合数学中一个常出现在各种计数问题中出现的数列 卡特兰数前几项为 1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012
  • Excel制作导入模板,多级联动下拉框(一整列的设置),修改一级下拉框内容,自动清空二级内容

    目录 效果展示 一 数据准备 二 模板制作 原因1 为空 原因二 名称管理器数据有误 三 修改一级下拉框内容 自动清空二级内容 1 效果演示 2 实际操作 效果展示 一 数据准备 1 新建一张表 在sheet2中放入数据 如图所示 2 点击
  • 提取任务相关成分的TRCA算法

    提取任务相关成分的TRCA算法 1 TRCA算法简介 2 TRCA算法原理与推导 3 Ensemble TRCA算法原理简介 1 TRCA算法简介 虽然基于CCA的方法在识别SSVEP信号方面具有不错的表现 但这类方法的性能仍旧易受到自发脑
  • 阿里云oss上传和下载

    这段为上传的代码 账号之类前往注册 可以根据个人情况进行修改 上传文件 param endPoint 路径 param bucketName 桶名称 param fileName 文件绝对路径和名称 param ossPath 上传存储路径
  • 线程池的使用实例

    线程池的使用实例 number 创建线程个数 创建线程池 ExecutorService cachedThreadPool Executors newCachedThreadPool 每次线程执行完毕 计数 1 当计数减到 0 之后 才能解
  • 红帽7.9部署telnet服务

    升级ssh 为预防万一提前配置telnet服务 安装软件包 yum install telnet server yum install xinetd xinetd加入开机自启 systemctl enable xinetd service
  • DB2分组查询之row_number() over(partition by order by )说明

    作用 数据库根据某几个字段去除重复记录 并进行排序 语法 ROW NUMBER OVER PARTITION BY COL1 ORDER BY COL2 功能 表示根据COL1分组 在分组内部根据 COL2排序 而这个值就表示每组内部排序后
  • 图像的打开、修改、显示和保存示例(>OpenCV 2.0)

    代码如下 include
  • Vue项目中使用Sass变量自定义ag-grid表格主题样式

    1 在Vue项目中新建一个样式文件 src assets styles table scss 引入ag grid默认的样式文件 table scss ag icons path node modules ag grid community
  • 蓝桥杯每日一题2023.9.16

    蓝桥杯2022年第十三届省赛真题 X进制减法 C语言网 dotcpp com 题目描述 进制规定了数字在数位上逢几进一 X 进制是一种很神奇的进制 因为其每一数位的进制并不固定 例如说某种 X 进制数 最低数位为二进制 第二数位为十进制 第
  • 【机器学习】【逻辑回归】最大似然估计的推导和求解步骤和梯度上升算法求解

    伯努利分布 如果随机变量X 0 1 并且相应的概率满足 P X 1 p 0
  • halfShader 模型切割

    Shader Unlit halfShader Properties Diffuse Diffuse Color 1 1 1 1 MainTex Texture 2D white StartCutoff StartCutoff Range
  • Kafka 架构及原理分析

    Kafka 架构及原理分析 文章目录 Kafka 架构及原理分析 简介 使用场景 架构 Broker Topic 副本机制 存储 消费分组 消费编号 数据多写支持 基于 binlog 实现主从复制 Kafka 的进阶功能 消息幂等性 事务
  • (五)数据清理之stata的使用----------变量进行具体处理的命令

    br 浏览文件所存储的内容 set obs n 具体样本数量 该命令会自动帮你生成n个样本 list 显示样本的内容 使用方法为 list in 5 显示第5个样本的内容 list in 1 10 表示至的关系 显示1到至10的样本内容 l
  • ldap 初始化配置

    dn cn config objectClass olcGlobal cn config olcArgsFile var run openldap slapd args olcPidFile var run openldap slapd p
  • 数学建模之BP神经网络

    1 BP网络基本数学原理 BP网络是一种多层前馈神经网络 它的名字源于在网络训练中 调整网络权值的训练算法是反向传播算法 即BP学习算法 BP网络是一种具有三层或者三层以上神经元的神经网络 包括输入层 隐含层和输出层 上下层之间实现全连接
  • Vuetify笔记(6):v-form表单及校验

    在表单验证方面 Vuetify拥有集成了众多的功能 想要使用第三方验证插件 您可以开箱即用Vee validate和Vuelidate 1 v form表单 1 1 v form的属性和方法 v form表单的常用属性 1 lazy val
  • 什么是视图?普通视图和物化视图什么区别?看这一篇就明白了

    目 录 普通视图 如何创建普通视图 物化视图 增量刷新是如何判断哪些记录被改动的 物化视图创建案例 普通视图 视图可以理解为一张表或多张表的预计算 这些表称为基表 它可以将所需要查询的结果封装成一张虚拟表 基于它创建时指定的查询语句返回的结
  • U-Boot顶层Makefile详解

    文章目录 一 U Boot工程目录分析 1 打包编译好的uboot 2 目录介绍 1 arch 2 board 3 configs 4 Makefile 5 config 6 README 二 VSCode工程创建 1 新建工程 2 屏蔽不
  • 【docker】文档 [不断补充中...]

    全栈技术分享 文档API化 简单易懂 快速入门 动手党福音 跨界佬福利 直接搞技术 不背八股文 觉得对你有帮助的话点个赞吧 感兴趣的加关注 收藏书签方便随时查阅 同文档会不定期更新补充 有问题欢迎留言讨论 虚拟化 一种资源管理技术 硬件资源