Docker基本使用

  • ~4.34K 字
  1. 1. 安装
    1. 1.1. Ubuntu安装
      1. 1.1.1. 更换镜像源
  2. 2. 使用
    1. 2.1. 部署到Docker
      1. 2.1.1. 构建镜像
      2. 2.1.2. 创建容器(镜像实例)
      3. 2.1.3. 管理容器
      4. 2.1.4. 连接到容器
      5. 2.1.5. 删除容器
  3. 3. 离线安装使用
    1. 3.1. 离线安装Docker
    2. 3.2. 离线导入 Docker 镜像

安装

Ubuntu安装

1
2
3
4
5
6
7
8
9
10
# 下载并执行Docker官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
sudo docker --version

更换镜像源

输入以下命令测试下

1
sudo docker run ubuntu:15.10 /bin/echo "Hello world"

它会以ubuntu15.10 镜像创建一个新容器(或者说镜像实例),然后在容器里执行 bin/echo “Hello world”,然后输出结果。

这里由于我们新安装Docker,还没有ubuntu15.10 镜像,这个命令会去镜像仓库 Docker Hub 下载公共镜像。这时一般会出现

1
> dock: error response from daemon ...

runUbuntu:15.10Error

出现这种情况需要更换Docker镜像源
修改或者新增/etc/docker/daemon.json

1
sudo vim /etc/docker/daemon.json

写入

1
2
3
4
5
6
7
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com"
]
}

重启 Docker 服务,使配置生效

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

输入以下命令

1
2
sudo docker run ubuntu:15.10 /bin/echo "Hello world"
> hello world

表示成功了

执行以下命令可以看到ubuntu的镜像

1
sudo docker images

使用

我们dotnet new一个控制台应用发布

1
2
dotnet new console -o App -n DotNet.Docker
dotnet publish App.sln -c Release

部署到Docker

在项目根目录创建Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 用 .NET SDK 编译项目
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /App

# 复制项目文件到容器
COPY . ./
# 还原依赖
RUN dotnet restore App.sln
# 发布
RUN dotnet publish App.sln -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/runtime:8.0
WORKDIR /App
COPY --from=build /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]

构建镜像

1
sudo docker build -t dotnet-image -f Dockerfile .

sudo docker images可查看已安装的镜像列表

1
2
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
dotnet-image latest 1c1f1433e51d 32 seconds ago 223MB

创建容器(镜像实例)

1
sudo docker create --name core-dotnet dotnet-image

sudo docker ps -a可查看所有容器的列表

1
2
3
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0be06126f7d dotnet-image "dotnet DotNet.Docke…" 12 seconds ago Created core-dotnet

管理容器

使用 sudo docker start 命令启动容器。
使用 sudo docker ps 命令可以显示正在运行的容器

1
2
3
4
5
6
sudo docker start core-dotnet
core-dotnet

sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf01364df453 dotnet-image "dotnet DotNet.Docke…" 53 seconds ago Up 10 seconds core-dotnet

连接到容器

使用 sudo docker startsudo docker attach 命令启动容器并查看输出流

1
2
3
4
5
sudo docker start core-dotnet
core-dotnet

sudo docker attach --sig-proxy=false core-dotnet
Hello World

删除容器

1
2
3
4
5
6
# 停止容器
sudo docker stop core-dotnet

# 删除容器
sudo docker rm core-dotnet
core-dotnet

每次docker命令加sudo太麻烦可以执行下面命令

1
2
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER

离线安装使用

离线安装Docker

下载 Docker 离线安装包 => 拷贝到离线设备 => 解压

  1. 确认Ubuntu版本

    1
    2
    3
    4
    # 查看版本,如Release:22.04
    lsb_release -a
    # 查看架构,如x86_64
    uname -m
  2. 访问Docker仓库 https://download.docker.com/linux/ubuntu/dists/ 下载三个核心包

    这里选择版本号,我这里是22.04也就是jammy,上面查看版本时会输出一个Codename。

    再进入/pool/stable/,选择架构,我这里是x86_64选amd64
    Docker仓库

    下载三个核心包 containerd.iodocker-ce-clidocker-ce

    下载时三个核心包时,docker-ce-clidocker-ce版本号需一致,如下面组合:

    • containerd.io_1.7.21-1_amd64.deb
    • docker-ce-cli_28.0.4-1ubuntu.22.04jammy_amd64.deb
    • docker-ce_28.0.4-1ubuntu.22.04jammy_amd64.deb

    三个核心包作用,containerd.io是Docker底层容器运行时、 docker-ce-cli是Docker命令行工具、 docker-ce是Docker的核心服务端程序

  3. 安装

    把下载好的包拷贝到离线设备(如 /tmp/docker 目录)

    按顺序安装

    1
    2
    3
    4
    cd /tmp/docker
    sudo dpkg -i containerd.io_*.deb
    sudo dpkg -i docker-ce-cli_*.deb
    sudo dpkg -i docker-ce_*.deb

    启动,验证

    1
    2
    3
    4
    5
    6
    # 启动Docker服务
    sudo systemctl start docker
    # 设置开机自启
    sudo systemctl enable docker
    # 验证版本号
    sudo docker --version

离线导入 Docker 镜像

下载 Docker 镜像 => 加载离线镜像

  1. 联网设备拉取需要的镜像

    1
    2
    3
    4
    5
    # 拉取.NET Runtime8.0 镜像
    docker pull mcr.microsoft.com/dotnet/runtime:8.0

    # 若需要SDK
    docker pull mcr.microsoft.com/dotnet/sdk:8.0
  2. 导出镜像为tar包

    1
    2
    3
    4
    5
    # 查看已下载的镜像
    docker images

    # 导出镜像,这里runtime和SDK合并一个包
    docker save -o dotnet-bundle-8.0.tar mcr.microsoft.com/dotnet/runtime:8.0 mcr.microsoft.com/dotnet/sdk:8.0
  3. 导入到离线设备

    1
    docker load -i /tmp/dotnet-images/dotnet-bundle-8.0.tar
  4. 运行.NET程序

    把发布文件拷贝到离线设备

    发布文件目录里面创建Dockfile

    1
    2
    3
    4
    5
    6
    7
    8
    # 基于导入的.NET镜像
    FROM mcr.microsoft.com/dotnet/runtime:8.0
    # 复制程序文件到容器
    COPY ./publish /app
    # 工作目录
    WORKDIR /app
    # 启动命令
    CMD ["dotnet", "app.dll"]

    构建自定义镜像

    1
    sudo docker build -t myappimage .

    运行

    1
    sudo docker run --name myapp-container myapp