关于

是一个开源的容器引擎与平台

基本概念

  1. 容器:一个包含了软件所有需要的资源和配置。是Docker运行的基本单元
  2. 镜像:创建容器的模板
  3. Dockerfile:一个文本文件(无后缀)用于构建Docker镜像
  4. 仓库:存放镜像的地方
  5. Docker Engine:运行docker容器

安装

# 安装依赖
dnf -y install dnf-plugins-core
# 安装源
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker
dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动
systemctl enable --now docker

如果无法拉取镜像,尝试修改DNS:

vim /etc/resolv.conf

# Generated by NetworkManager
search localdomain
nameserver 8.8.8.8
nameserver 223.5.5.5
nameserver 1.1.1.1 

# 重启生效
systemctl restart NetworkManager
或者
nmcli connection up ens160(你的网卡,tab出来)

基本用法

  1. 拉取镜像

    • 使用

      docker pull <镜像名>:<标签>
      docker pull nginx:latest
  2. 运行容器

    • 使用

      docker run -d -p <主机端口>:<容器端口> --name <容器名> <镜像名>
      docker run -d -p 8080:80 --name my-nginx nginx
  3. 查看容器

    • 查看正在运行的容器

      docker ps
    • 查看所有容器(包括停止的):

      docker ps -a
  4. 停止和启动容器

    • 停止容器:

      docker stop <容器ID或名称>
    • 启动已停止的容器:

      docker start <容器ID或名称>
  5. 删除容器

    • 删除容器:

      docker rm <容器ID或名称>
  6. 删除镜像

    • 删除镜像:

      docker rmi <镜像ID或名称>

进阶操作

进入容器

docker exec -it docker_id /bin/bash

将本地的8000端口映射到docker的80端口并在shell运行容器,挂载本地的/mnt到容器的/mnt下 可以+ --name指定名字

docker run -itd -d -p 8000:80 -v /mnt:/mnt rockylinux:9

12.docker服务
任务描述:请采用podman,实现有守护程序的容器应用。
(1)在linux2上安装docker-ce,导入rocky镜像。
(2)创建名称为skills的容器,映射本机的8000端口到容器的80端口,在容器内安装apache2,默认网页内容为“HelloDocker”。
(3)配置docker私有仓库。

[root@localhost ~]# docker load -i rockylinux9.tar 
[root@localhost ~]# mount /dev/cdrom /mnt
[root@localhost ~]# docker image list
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
rockylinux   9         656f801c021c   21 months ago   176MB
[root@localhost ~]# docker run -itd -d -p 8000:80 -v /mnt:/mnt rockylinux:9
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS              PORTS                                     NAMES
a0d334cf0d10   rockylinux:9   "/bin/bash"   About a minute ago   Up About a minute   0.0.0.0:8000->80/tcp, [::]:8000->80/tcp   nostalgic_kirch
[root@localhost ~]# docker exec -it a0d334cf0d10 /bin/bash
[root@a0d334cf0d10 /]# cd /etc/yum.repos.d/
[root@a0d334cf0d10 yum.repos.d]# rm -rf *
[root@a0d334cf0d10 yum.repos.d]# vi a.repo
[root@a0d334cf0d10 yum.repos.d]# yum -y install httpd
[root@a0d334cf0d10 yum.repos.d]# echo "HelloDocker" > /var/www/html/index.html
# 等价于systemctl restart
[root@a0d334cf0d10 yum.repos.d]# /sbin/httpd 
[root@a0d334cf0d10 yum.repos.d]# curl 127.0.0.1
HelloDocker

配置docker私有仓库。

Last login: Mon Nov 25 16:50:00 2024 from 192.168.10.1
[root@master ~]# docker run -d -p 5000:5000 --restart=always --name registry registry:2
Unable to find image 'registry:2' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
[root@master ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
dc0decf4841d: Pull complete 
6cb0aa443e23: Pull complete 
813676e291ef: Pull complete 
dc2fb7dcec61: Pull complete 
916205650bfe: Pull complete 
Digest: sha256:543dade69668e02e5768d7ea2b0aa4fae6aa7384c9a5a8dbecc2be5136079ddb
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
[root@master ~]# docker run -d -p 5000:5000 --restart=always --name registry registry
066f158aac0d04bed279768ae806ebf36117c60b803851cd6bf852783a1130b8
[root@master ~]# vim /etc/docker/daemon.json
[root@master ~]# systemctl restart docker

使用Podman

任务描述:请采用豌豆男人,实现无守护程序的容器应用。

(1)在linux3上安装podman,导入rocky镜像。

(2)创建名称为skills的容器,映射本机的8000端口到容器的80端口,在容器内安装apache2,默认网页内容为“HelloPodman”。

# AppStream网络源自带
dnf -y install podman

# 导入镜像
podman load -i rockylinux9.tar 

# 挂载系统镜像
mount /dev/cdrom /mnt

# 启动容器
podman run -it -d -p 8000:80 -v /mnt:/mnt localhost/rockylinux:9

# 进入容器
# 首先确定容器id
[root@localhost ~]# podman ps
CONTAINER ID  IMAGE                   COMMAND     CREATED             STATUS             PORTS                 NAMES
83673af97759  localhost/rockylinux:9  /bin/bash   About a minute ago  Up About a minute  0.0.0.0:8000->80/tcp  gifted_cray
# 进入
podman exec -it gifted_cray /bin/bash
-i:交互模式,保持 STDIN 打开
-t:分配一个伪终端
gifted_cray:容器的名称
/bin/bash:要在容器中执行的命令

# 配置apache服务
[root@da9642b080d4 mnt]# ls /mnt
ls: cannot open directory '/mnt': Permission denied
# 这种情况下记得关闭主机selinux
yum -y install httpd
echo "HelloPodman" > /var/www/html/index.html
/sbin/httpd
[root@da9642b080d4 yum.repos.d]# curl 127.0.0.1
HelloPodman