docker认识

举报
林太白 发表于 2025/12/29 16:21:08 2025/12/29
【摘要】 docker认识

1、docker认识

下载地址

注意我们一般采取Docker Desktop进行管理,就相当于我们的版本或者镜像综合的一个管理工具

// 官方网址
https://docs.docker.com/get-started/introduction/get-docker-desktop/

// 查看版本
docker --version
Docker version 28.5.2, build ecc6942

docker常用命令

# 列出所有本地镜像
docker images

# 或者使用更详细的格式
docker image ls

// 删除镜像
# 通过镜像ID删除
docker rmi <image_id>

# 通过镜像名删除
docker rmi <image_name>:<tag>

# 示例
docker rmi ubuntu:20.04

# 删除多个指定镜像
docker rmi <image1> <image2> <image3>

介绍

Docker 是一个开源的容器化平台,它可以将应用程序及其依赖项打包到一个轻量级、可移植的容器中。简单来说,Docker 让你能够将你的应用和运行环境打包在一起,确保在任何地方都能以相同的方式运行。

Docker 已经成为现代软件开发和部署的重要工具,特别是在微服务架构和 DevOps 实践中。

主要特点和优势

  1. 轻量级:容器共享主机操作系统的内核,不需要像虚拟机那样运行完整的操作系统,因此更加轻量。
  2. 可移植性:容器可以在任何支持 Docker 的环境中运行,包括开发者的笔记本电脑、测试服务器、生产环境等。
  3. 一致性:确保应用在开发、测试和生产环境中表现一致,消除"在我电脑上能运行"的问题。
  4. 快速部署:容器的启动速度非常快,通常只需几秒钟。
  5. 资源效率高:与虚拟机相比,容器占用的资源更少,可以在同一台机器上运行更多容器。
  6. 版本控制:Docker 镜像可以像代码一样进行版本控制,便于追踪和管理变更。

Docker 的基本概念

  • 镜像(Image):一个只读的模板,用于创建容器。
  • 容器(Container):镜像的运行实例,是轻量级、可执行的独立软件包。
  • 仓库(Repository):用于存储和分发镜像的地方,如 Docker Hub

相关镜像源

docker国内的镜像源

DaoCloud 镜像站:https://docker.m.daocloud.io
网易云:https://hub-mirror.c.163.com
百度云:https://mirror.baidubce.com
南京大学镜像站:https://docker.nju.edu.cn

设置镜像源

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://docker.nju.edu.cn"
    ]
}
EOF

// 重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

镜像源信息查看

// 查看当前生效的镜像源

# 查看Docker信息
docker info

# 在输出中查找Registry Mirrors部分



// 查看设置的镜像源
cat /etc/docker/daemon.json

// 查看镜像源
docker info | grep -i "Registry Mirrors" -A 5

2、安装使用

Mac上安装Docker

1、下载地址

选择自己对应的版本下载即可

https://www.docker.com/products/docker-desktop/

汉化Docker Desktop

Docker Desktop 是一个让开发者能够在 Windows 和 macOS 上轻松使用 Docker 的应用程序。

下载对应Docker Desktop版本号、操作系统的汉化包

服务器安装Docker

进入我们的服务器,我的演示为ubuntu服务器

以linux系统的主机为最佳

下载安装的官网
https://get.docker.com/

第一个和第四个命令

// 添加Docker官方GPG密钥
curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh install-docker.sh

// 系统建议安装命令
sudo apt install docker.io

// 验证是否安装成功
docker --version

3、使用

DockerFile文件配置

Docker打包项目一般都要新建DockerFile文件,以rust为例,内容如下

# 构建阶段
FROM rust:1.70 as builder
WORKDIR /app
# 优化编译
ENV RUSTFLAGS="-C target-feature=+crt-static"
ENV CARGO_TERM_COLOR=always
COPY Cargo.toml ./
RUN mkdir src && echo "fn main() {}" > src/main.rs && cargo build --release
RUN rm -rf src
COPY src ./src
RUN cargo build --release

# 运行阶段
FROM scratch
# 从构建阶段复制编译好的二进制文件和SSL证书(如果需要HTTPSCOPY --from=builder /app/target/release/nexus-rust-api /nexus-rust-api
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
EXPOSE 3300
CMD ["/nexus-rust-api"]

添加权限

将用户添加到docker组

sudo usermod -aG docker $USER
# 然后重新登录或执行:
newgrp docker

打包构建

# 构建镜像
docker build -t nexus-rust-api .

没有将用户添加到用户组可以用这个命令构建镜像
sudo docker build -t nexus-rust-api .

# 运行容器
docker run -p 3300:3300 nexus-rust-api

打包过程一直失败,这里我们需要使用国内镜像进行加速

国内镜像加速

# 创建或编辑daemon.json

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}
EOF

// 以下命令验证配置是否生效:出现刚刚的镜像源就是成功了
docker info | grep -A 10 "Registry Mirrors"

// 配置阿里官方镜像库
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}
EOF

# 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker国内镜像地址

https://www.cnblogs.com/wzzkaifa/p/19041828

# 停止Docker服务
sudo systemctl stop docker

# 配置新的镜像源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.1ms.run"]
}
EOF

# 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl start docker

# 验证配置
docker info | grep -A 10 "Registry Mirrors"


// DockerFile文件配置

# 构建阶段
FROM docker.1ms.run/library/rust:1.70 as builder
WORKDIR /app
COPY Cargo.toml ./
RUN mkdir src && echo "fn main() {}" > src/main.rs && cargo build --release
RUN rm -rf src
COPY src ./src
RUN cargo build --release

# 运行阶段
FROM scratch
COPY --from=builder /app/target/release/nexus-rust-api /nexus-rust-api
EXPOSE 3300
CMD ["/nexus-rust-api"]

docker build -t nexus-rust-api .

FROM rust:1.75
WORKDIR /app
COPY . .
RUN cargo build --release
CMD ["./target/release/nexus-rust-api"]

配置信息

本地我的配置

sudo mkdir -p /etc/docker

//  清华大学
"https://mirrors.tuna.tsinghua.edu.cn/docker-ce"


sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://mirrors.tuna.tsinghua.edu.cn/docker-ce",
    "https://ccr.ccs.tencentyun.com",
    "https://docker.1ms.run",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://do.nark.eu.org",
    "https://dc.j8.work",
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn",
    "https://docker.1panel.live",
    "https://docker.1panelproxy.com",
    "https://elastic.m.daocloud.io",
    "https://elastic.m.daocloud.io",
    "https://docker.m.daocloud.io",
    "https://gcr.m.daocloud.io",
    "https://ghcr.m.daocloud.io",
    "https://k8s-gcr.m.daocloud.io",
    "https://k8s.m.daocloud.io",
    "https://mcr.m.daocloud.io",
    "https://nvcr.m.daocloud.io",
    "https://quay.m.daocloud.io"
  ]
}
EOF

借鉴配置

https://github.com/rust-cross/rust-musl-cross.git


FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive

# Make sure we have basic dev tools for building C libraries.  Our goal
# here is to support the musl-libc builds and Cargo builds needed for a
# large selection of the most popular crates.
#
RUN apt-get update && \
    apt-get install -y \
    build-essential \
    cmake \
    curl \
    file \
    git \
    sudo \
    xutils-dev \
    unzip \
    ca-certificates \
    python3 \
    python3-pip \
    autoconf \
    autoconf-archive \
    automake \
    flex \
    bison \
    llvm-dev \
    libclang-dev \
    clang \
    && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# Install Let's Encrypt R3 CA certificate from https://letsencrypt.org/certificates/
COPY lets-encrypt-r3.crt /usr/local/share/ca-certificates
RUN update-ca-certificates

ARG TARGET=x86_64-unknown-linux-musl
ARG MUSL_TARGET=$TARGET
ENV RUST_MUSL_CROSS_TARGET=$MUSL_TARGET
ARG RUST_MUSL_MAKE_CONFIG=config.mak

COPY $RUST_MUSL_MAKE_CONFIG /tmp/config.mak

RUN cd /tmp && \
    git clone --depth 1 https://github.com/richfelker/musl-cross-make.git && \
    cp /tmp/config.mak /tmp/musl-cross-make/config.mak && \
    cd /tmp/musl-cross-make && \
    export CFLAGS="-fPIC -g1 $CFLAGS" && \
    export TARGET=$MUSL_TARGET && \
    if [ `dpkg --print-architecture` = 'armhf' ] && [ `uname -m` = 'aarch64' ]; then SETARCH=linux32; else SETARCH= ; fi && \
    $SETARCH make -j$(nproc) > /tmp/musl-cross-make.log && \
    $SETARCH make install >> /tmp/musl-cross-make.log && \
    ln -s /usr/local/musl/bin/$TARGET-strip /usr/local/musl/bin/musl-strip && \
    cd /tmp && \
    rm -rf /tmp/musl-cross-make /tmp/musl-cross-make.log

RUN mkdir -p /home/rust/libs /home/rust/src

# Set up our path with all our binary directories, including those for the
# musl-gcc toolchain and for our Rust toolchain.
ENV PATH=/root/.cargo/bin:/usr/local/musl/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV TARGET_CC=$MUSL_TARGET-gcc
ENV TARGET_CXX=$MUSL_TARGET-g++
ENV TARGET_AR=$MUSL_TARGET-ar
ENV TARGET_RANLIB=$MUSL_TARGET-ranlib
ENV TARGET_HOME=/usr/local/musl/$MUSL_TARGET
ENV TARGET_C_INCLUDE_PATH=$TARGET_HOME/include/

# pkg-config cross compilation support
ENV TARGET_PKG_CONFIG_ALLOW_CROSS=1
ENV TARGET_PKG_CONFIG_SYSROOT_DIR=$TARGET_HOME
ENV TARGET_PKG_CONFIG_PATH=$TARGET_HOME/lib/pkgconfig:/usr/local/musl/lib/pkgconfig
ENV TARGET_PKG_CONFIG_LIBDIR=$TARGET_PKG_CONFIG_PATH

# We'll build our libraries in subdirectories of /home/rust/libs.  Please
# clean up when you're done.
WORKDIR /home/rust/libs

RUN export CC=$TARGET_CC && \
    export C_INCLUDE_PATH=$TARGET_C_INCLUDE_PATH && \
    export AR=$TARGET_AR && \
    export RANLIB=$TARGET_RANLIB && \
    echo "Building zlib" && \
    VERS=1.2.13 && \
    CHECKSUM=b3a24de97a8fdbc835b9833169501030b8977031bcb54b3b3ac13740f846ab30 && \
    cd /home/rust/libs && \
    curl -sqLO https://zlib.net/fossils/zlib-$VERS.tar.gz && \
    echo "$CHECKSUM zlib-$VERS.tar.gz" > checksums.txt && \
    sha256sum -c checksums.txt && \
    tar xzf zlib-$VERS.tar.gz && cd zlib-$VERS && \
    CFLAGS="-O3 -fPIC" ./configure --static --prefix=$TARGET_HOME && \
    make -j$(nproc) && make install && \
    cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt

# The Rust toolchain to use when building our image
ARG TOOLCHAIN=stable
# Install our Rust toolchain and the `musl` target.  We patch the
# command-line we pass to the installer so that it won't attempt to
# interact with the user or fool around with TTYs.  We also set the default
# `--target` to musl so that our users don't need to keep overriding it
# manually.
# Chmod 755 is set for root directory to allow access execute binaries in /root/.cargo/bin (azure piplines create own user).
#
# Remove docs and more stuff not needed in this images to make them smaller
RUN chmod 755 /root/ && \
    if [ `dpkg --print-architecture` = 'armhf' ]; then GNU_TARGET="armv7-unknown-linux-gnueabihf"; else GNU_TARGET=`uname -m`-unknown-linux-gnu; fi && \
    export RUSTUP_USE_CURL=1 && \
    curl https://sh.rustup.rs -sqSf | \
    sh -s -- -y --profile minimal --default-toolchain $TOOLCHAIN --default-host $GNU_TARGET && \
    rustup target add $TARGET || rustup component add --toolchain $TOOLCHAIN rust-src && \
    rustup component add --toolchain $TOOLCHAIN rustfmt clippy && \
    rm -rf /root/.rustup/toolchains/$TOOLCHAIN-$GNU_TARGET/share/

RUN echo "[target.$TARGET]\nlinker = \"$TARGET_CC\"\n" > /root/.cargo/config.toml

# Build std sysroot for targets that doesn't have official std release
ADD Xargo.toml /tmp/Xargo.toml
ADD s390x-unwind.patch /tmp/s390x-unwind.patch
ADD build-std.sh .
RUN bash build-std.sh

ENV RUSTUP_HOME=/root/.rustup
ENV CARGO_HOME=/root/.cargo
ENV CARGO_BUILD_TARGET=$TARGET

ENV CFLAGS_armv7_unknown_linux_musleabihf='-mfpu=vfpv3-d16'

# Build statically linked binaries for MIPS targets
ENV CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_RUSTFLAGS='-C target-feature=+crt-static'
ENV CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUSTFLAGS='-C target-feature=+crt-static'
ENV CARGO_TARGET_MIPS64_UNKNOWN_LINUX_MUSLABI64_RUSTFLAGS='-C target-feature=+crt-static'
ENV CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_MUSLABI64_RUSTFLAGS='-C target-feature=+crt-static'

# Expect our source code to live in /home/rust/src
WORKDIR /home/rust/src
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。