【docker-1】快速入门docker

embedded/2025/1/23 15:09:19/

docker_0">docker搭建

1、下载二进制文件

wget https://mirror.nju.edu.cn/docker-ce/linux/static/stable/aarch64/docker-20.10.7.tgz

解压docker目录

tar -xzvf docker-20.10.7.tgz .

安装文件到/usr/local/bin

mv ./docker/* /usr/local/bin

dockerservice_20">2、配置docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service
Wants=network-online.target containerd.service
Requires=docker.socket[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/local/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes# kill only the docker process, not all processes in the cgroup
KillMode=process
OOMScoreAdjust=-500[Install]
WantedBy=multi-user.target

dockersocket_72">3、配置docker.socket

[Unit]
Description=Docker Socket for the API[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker[Install]
WantedBy=sockets.target

4、配置containerd.service

[unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
TasksMax=infinity
OOMScoreAdjust=-999[Install]
WantedBy=multi-user.target

5、创建一个镜像

admin01@admin01-kaitianm740z-d157:/data/docker/c++$ cat hello.cpp 
#include <iostream>
int main() {std::cout << "Hello from Docker!" << std::endl;return 0;
}

创建dockerfile

admin01@admin01-kaitianm740z-d157:/data/docker/c++$ cat dockerfile 
FROM gcc:11COPY . /data/docker/helloworkRUN ls -lWORKDIR /data/docker/helloworkRUN g++ -o hello hello.cppCMD ["./hello"]

生成镜像文件,在包含dockerfile的文件中执行

docker build -t hello_img .

检测容器的文件目录

docker run --rm -it hello_img ls /data/docker/hellowork

6、从镜像启动容器运行

docker run hello_imgadmin01@admin01-kaitianm740z-d157:/data/docker/c++$ docker run hello_img
Hello from Docker!

7、移除镜像

docker rmi hell_img:latest

8、镜像与容器

1. 镜像(Image)

  • 定义:镜像是一个只读模板,包含了运行一个容器所需的文件系统、依赖项、应用程序代码以及运行环境。
  • 特点
    • 不可变:镜像是静态的,一旦创建,内容不会改变。
    • 可共享:镜像可以被上传到 Docker Hub 或其他镜像仓库,供其他用户下载和使用。
    • 多层结构:镜像由多个层(layers)组成,每一层代表了构建过程中的一次变更。
  • 作用
    • 镜像是容器的模板,用于创建容器实例。
    • 它定义了容器启动时的初始状态和运行环境。

2. 容器(Container)

  • 定义:容器是镜像的运行实例。它是一个隔离的、可执行的环境,运行在镜像的基础上。

  • 特点

    • 动态:容器是动态的,可以启动、停止、删除等。
    • 隔离:容器之间是隔离的,每个容器都有自己独立的文件系统、网络栈和资源限制。
    • 临时:容器的生命周期是临时的,删除容器后,其运行状态和数据会丢失(除非使用了持久化存储)。
  • 作用

    • 容器是运行应用程序的实际环境。
    • 它可以根据镜像的定义启动应用程序,并提供运行时所需的资源和环境。

镜像与容器的关系

  1. 镜像是容器的模板
    • 镜像定义了容器的初始状态和运行环境。
    • 容器是基于镜像创建的,每个容器都是镜像的一个独立实例。
  2. 容器是镜像的运行实例
    • 当你运行 docker run <image> 命令时,Docker 会从指定的镜像创建一个新的容器实例。
    • 容器可以独立运行,互不干扰。
  3. 容器可以修改镜像的内容
    • 容器在运行时可以对文件系统进行修改(如创建文件、安装软件等)。
    • 这些修改只影响当前容器,不会影响镜像本身。
  4. 容器的生命周期独立于镜像
    • 容器可以启动、停止、删除,而镜像始终保持不变。
    • 如果需要保存容器的修改,可以将容器提交为一个新的镜像(docker commit)。

http://www.ppmy.cn/embedded/156323.html

相关文章

图片生成Prompt编写技巧

1. 图片情绪&#xff08;场景氛围&#xff09; 一张图片一般都会有一个情绪基调&#xff0c;因为作画本质上也是在传达一些情绪&#xff0c;一般都会借助图片的氛围去转达。例如&#xff1a;比如家庭聚会一般是欢乐、喜乐融融。断壁残垣一般是悲凉。还有萧瑟、孤寂等。 2.补充细…

【深度学习基础】多层感知机 | 多层感知机的实现

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

SpringCloud Gateway 集成 Sentinel 详解 及实现动态监听Nacos规则配置实时更新流控规则

目录 一、前言二、版本选择和适配2.1、本文使用各组件版本2.2、官方推荐版本 三、部署sentinel-dashboard3.1、下载 sentinel-dashboard jar包3.2、启动 sentinel-dashboard 四、Gateway 集成 Sentinel实现控制台配置流控规则测试4.1、添加Gateway 集成 Sentinel 包4.2、添加 G…

Servlet3 简单测试

1.注解定义servlet的时候如果 WebServlet("some") 如果url-pattern前面不加 / 回报以下的错误&#xff0c;和web.xml中定义是一致的。 java.lang.IllegalArgumentException: Invalid [some] in servlet mapping 2.urlPatterns {"/some" , "/aaa&qu…

微前端qiankun的部署

微前端qiankun的部署 本地开发主应用配置启动端口子应用配置启动端口测试环境部署:场景 1:主应用和微应用部署到同一个服务器(同一个 IP 和端口)微应用都放在在一个特殊名称(不会和微应用重名)的文件夹下主应用配置子应用配置配置nginx本地开发 主应用配置启动端口 打开…

1.22双指针刷题

acwing799最长连续不重复子序列问题 acwing800数组元素的目标和 acwing2816判断子序列 洛谷AT_abc352_b Typing CF1968B Prefiquence交不了 #include<iostream> #include<cstring> using namespace std; int n,a,b; string s,t; int k;int main(){cin>…

招商蛇口:于高新 CID,启幕品质人居新篇

在房地产行业的风云变幻中&#xff0c;招商蛇口始终以卓越之姿领航前行。在第二十一届&#xff08;2024&#xff09;蓝筹年会上&#xff0c;招商蛇口凭借财务稳健、产品与运营等多方面的出色表现&#xff0c;成功入选 “可持续蓝筹价值企业”。在 2024 第十届产业园区大会上&am…

在MyBatis的XML映射文件中,<trim>元素所有场景下的完整使用示例

在MyBatis的XML映射文件中&#xff0c;<trim>元素用于动态地添加SQL语句的一部分&#xff0c;例如SET或WHERE子句&#xff0c;并可以处理前缀、后缀以及多余的逗号或AND等连接符。下面是一些<trim>元素在不同场景下的完整使用示例&#xff1a; 示例1: 使用<trim…