前言
由于上次不小心执行rm -rf /*导致了我的电脑焕然一新()
之后一直在尝试重新搭建博客,然而由于放弃了原有的Hexo选择了Hugo,导致进展一直不甚顺利
不过在经过多次尝试和调整之后,新的博客也是搭好了,后面可以正常更新了。
虽然还有一些问题没处理好,但是大体记录学习过程的目的还是能达到的,小问题就暂且按下不表吧()
Docker学习
关于Docker
众所周知Docker是一个容器引擎,性能很好。
详细了解:
Debian Docker 安装
Docker 支持以下的 64 位 Debian 版本:
- Debian Bookworm 12 (稳定版)
- Debian Bullseye 11 (旧稳定版)
支持的架构包括 x86_64(amd64)、armhf、arm64 和 ppc64le。
卸载旧版本
如果你之前安装过 Docker Engine 之前,你需要卸载旧版本,避免冲突:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
使用官方安装脚本自动安装
安装命令如下:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
手动安装(推荐)
1. 更新软件包
首先,更新现有的软件包和包缓存:
sudo apt update
sudo apt upgrade
2. 安装依赖包
安装一些需要的依赖包,这些包允许 apt 使用 HTTPS 协议来访问 Docker 仓库:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
3. 添加 Docker 官方 GPG 密钥
使用下面的命令来添加 Docker 官方的 GPG 密钥:
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
4. 添加 Docker 仓库
添加 Docker 官方的 APT 软件源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新
sudo apt-get update
5. 更新 APT 软件包缓存
添加仓库后,更新 APT 包索引:
sudo apt update
确保你现在从 Docker 官方仓库安装 Docker 而不是 Debian 默认仓库:
apt-cache policy docker-ce
你应该看到它指向 https://download.docker.com/,确保这就是官方的 Docker 仓库。
6. 安装 Docker
现在,你可以安装 Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
7. 启动并验证 Docker
启动 Docker 并设置为开机自启:
sudo systemctl start docker
sudo systemctl enable docker
你可以使用以下命令来验证 Docker 是否安装成功:
sudo docker --version
运行以下测试命令确保 Docker 正常工作:
sudo docker run hello-world
卸载 docker
删除安装包:
sudo apt-get purge docker-ce
删除镜像、容器、配置文件等内容:
sudo rm -rf /var/lib/docker
Docker 基本命令
这里记录一下Docker基本命令,方便查(其实感觉查菜鸟教程更快一点() )
| 命令 | 功能 | 示例 |
|---|---|---|
docker run | 启动一个新的容器并运行命令 | docker run -d ubuntu |
docker ps | 列出当前正在运行的容器 | docker ps |
docker ps -a | 列出所有容器(包括已停止的容器) | docker ps -a |
docker build | 使用 Dockerfile 构建镜像 | docker build -t my-image . |
docker images | 列出本地存储的所有镜像 | docker images |
docker pull | 从 Docker 仓库拉取镜像 | docker pull ubuntu |
docker push | 将镜像推送到 Docker 仓库 | docker push my-image |
docker exec | 在运行的容器中执行命令 | docker exec -it container_name bash |
docker stop | 停止一个或多个容器 | docker stop container_name |
docker start | 启动已停止的容器 | docker start container_name |
docker restart | 重启一个容器 | docker restart container_name |
docker rm | 删除一个或多个容器 | docker rm container_name |
docker rmi | 删除一个或多个镜像 | docker rmi my-image |
docker logs | 查看容器的日志 | docker logs container_name |
docker inspect | 获取容器或镜像的详细信息 | docker inspect container_name |
docker exec -it | 进入容器的交互式终端 | docker exec -it container_name /bin/bash |
docker network ls | 列出所有 Docker 网络 | docker network ls |
docker volume ls | 列出所有 Docker 卷 | docker volume ls |
docker-compose up | 启动多容器应用(从 docker-compose.yml 文件) | docker-compose up |
docker-compose down | 停止并删除由 docker-compose 启动的容器、网络等 | docker-compose down |
docker info | 显示 Docker 系统的详细信息 | docker info |
docker version | 显示 Docker 客户端和守护进程的版本信息 | docker version |
docker stats | 显示容器的实时资源使用情况 | docker stats |
docker login | 登录 Docker 仓库 | docker login |
docker logout | 登出 Docker 仓库 | docker logout |
Docker 镜像设置
由于一些原因,国内无法直连Docker官方仓库,原本的镜像站现在也都无法使用了,现在只剩一部分个人搭的镜像站可以使用,因此请经常检查自己的Docker镜像是否还能用
配置方式:
临时使用:
直接使用:
直接用镜像域名拼接上官方镜像名。例如:要拉取 istio/distroless,可以这样写:
docker pull docker-0.unsee.tech/istio/distroless
长久有效:
以下命令在Debian 12.5,Ubuntu 16.04+适用
修改文件 /etc/docker/daemon.json(如果不存在则需要创建创建,注意不要写入中文,要带 https://),并重启服务。
# 创建目录
sudo mkdir -p /etc/docker
# 写入配置文件
sudo nano /etc/docker/daemon.json
或 sudo vi /etc/docker/daemon.json
# 写入下面的
{
"registry-mirrors": [
"https://docker-0.unsee.tech",
"https://docker-cf.registry.cyou",
"https://docker.1panel.live"
]
}
# 重启docker服务
sudo systemctl daemon-reload && sudo systemctl restart docker
使用docker pull 拉取镜像进行测试
Docker file
什么是 Dockerfile?
Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
通过定义一系列命令和参数,Dockerfile 指导 Docker 构建一个自定义的镜像。
例如:
FROM golang:1.18-alpine AS builder
COPY . /app
RUN mkdir /out
WORKDIR /app
RUN go env -w GO111MODULE=on \
&& go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct \
&& CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /out/main .
RUN cp -r /app/assets /app/views -t /out
FROM centos:7
COPY --from=builder /out /app
RUN chmod +x /usr/bin/curl \
&& rm -rf /etc/yum.repos.d/*.repo \
&& curl -k -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
&& yum --exclude=kernel* update -y \
&& yum install -y epel-release \
&& rm -rf /etc/yum.repos.d/epel.repo \
&& curl -k -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
&& yum groupinstall -y "Development Tools" \
&& yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel make wget \
&& cd /usr/src \
&& curl -k -o Python-3.10.4.tgz https://mirrors.huaweicloud.com/python/3.10.4/Python-3.10.4.tgz \
&& tar xzf Python-3.10.4.tgz \
&& cd Python-3.10.4 \
&& ./configure --enable-optimizations \
&& make altinstall \
&& rm -f /usr/src/Python-3.10.4.tgz \
&& ln -s /usr/local/bin/python3.10 /usr/bin/python3 \
&& yum clean all \
&& mkdir -p /home/John \
&& chmod -R 755 /home/John
COPY shell/* /home/John/
COPY start.sh /app/start.sh
RUN chmod +x /home/John/shell.py
WORKDIR /app
EXPOSE 8000
CMD ["/bin/bash", "/app/start.sh"]
基础知识
- 每个保留关键字(指令)都必须是大写字母
- 执行从上到下顺序执行
- #表示注释
- 每一个指令都会创建提交一个新的镜像层
- Dockerfile:是定义了构建镜像文件的源代码,能够构建镜像文件
- Docker Images:通过DockerFile构建生成的镜像,最终发布和运行的产品
- Docker Container:容器就是镜像运行起来提供服务的
Dockerfile的指令
#指定基础镜像,一切从这里构建
FROM
#镜像是谁写的,姓名+邮箱
MAINTAINER
#镜像构建运行时需要运行的命令
RUN
#添加的内容
ADD
#指定镜像的工作目录
WORKDIR
#指定挂载的容器卷
VOLUME
#指定暴露的端口
EXPOSE
#指定容器启动时要运行的命令,只有最后一个会生效,可被替代
CMD
#指定容器启动时要运行的命令,可以追加命令
ENTRYPOINT
#当构建一个被继承的DockerFile,这个时候就会运行ONBUILD指令
ONBUILD
#类似ADD,将文件拷贝进镜像中
COPY
#构建的时候设置环境变量
ENV
Docker Compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
注意:安装docker的同时,已经安装了Docker compose V2,无需再另外安装 Docker compose V1 ;Docker compose V2的命令以docker compose开头,如docker compose up
Docker-compose.yml
Dockerfile让容器在任何地方运行,但如果要运行多个容器就十分麻烦,这就需要使用docker-compose.yml文件。
例如:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000" # 可在此处修改映射到宿主机的端口
environment:
FLAG: "ISCC{cl1mb3d_p3ngl41_sh4d0w}" # 可在此处动态修改FLAG值
command: ["/home/John/.bashrc", "/app/start.sh"]
两个概念
- services(服务):容器、应用(mysql、nginx…)
- project(项目):一组关联的容器
Docker compose常用命令
up 启动容器,终端运行
images 列出镜像
down 停止和删除容器、网络、卷、镜像
start 启动项目中容器,后台运行
logs 查看项目中容器日志
stop 停止项目中容器
restart 重启项目中容器
ps 查看启动的容器
#选项如下
-f file 指定Compose模板文件,默认为docker-compose.yml,可以多次指定
-p project 指定项目名称,默认将使用所在目录名称作为项目名
-d 后台运行容器
requirements.txt
有时候可能会遇见使用requirements.txt来存储依赖的情况,这个不必多言()
Python项目依赖,生成requirements.txt 有两种方法
1、进入需要生成文件的目录,执行
pip freeze > requirements.txt
,此方法会包含环境所有的依赖包。
直接使用此命令,会把当前共用python环境的所有包都写进去,这些不必要的。可以在目标目录下面先pipenv shell,进入pipenv环境,再用上面的命令,产生的requirements.txt 就只包含虚拟环境的依赖项。
2、pip install pipreqs
进入需要生成文件的目录执行: pipreqs ./ (或者直接 pipreqs D:\test(实际路径))
在此时可能会遇见
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 776: illegal multibyte sequence
这个错误.
解决方法:指定编码格式 pipreqs ./ –encoding=utf8
如果要安装requirements.txt中的类库内容,那么你可以执行:
pip install -r requirements.txt
在dockerfile里就是
RUN pipe install -r requirements.txt
参考:
