Docker

概述

Docker是一种以应用为核心,对程序文件,运行时环境,软件依赖包都可以封装打包,部署的一种 技术手段

Docker的容器中没系统

开放理念

  • 2014年,Docker开源罗 自己用Golang开发的Libcontainer
  • 2015年,在Docker的倡导下,多个公司联合指定罗"开放容器交互标准",既OCI,这是一个关于容器格式和运行时规范文件,其中包含:
    • 运行时标准(RUNTIME-SPEC)
    • 容器镜像标准(IMAGE-SPEC)
    • 镜像分发标准(DISTRIBUTION-SPEC)
  • 三大概念
    • 容器:一个运行在隔离环境中的程序
    • 镜像:只读模板,包括篡创建容器所需要的文件和配置信息
    • 仓库:存储,分发,管理镜像的空间

安装部署

bash 复制代码
# 开启路由转发功能
[root@docker ~]# echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf
# 打印system配置
[root@docker ~]# sysctl -p
# 安装Docker相关软件包
[root@docker ~]# dnf install -y docker-ce
# 开启Docker服务并开机自启动
[root@docker ~]# systemctl enable --now docker
# 查看服务器与客户端版本
[root@docker ~]# docker version
# 添加daemon.json,配置镜像仓库加速地址,比如阿里云,华为云官方的镜像仓库
[root@docker ~]# vim /etc/docker/daemon.json

{

    "registry-mirrors": ["这里配置镜像仓库加速器地址"],

    "insecure-registries":[]

}
# 重启docker服务
[root@docker ~]# systemctl restart docker
# 查看 docker 服务配置信息
[root@docker ~]# docker info

镜像管理命令

docker images //查看本机镜像 -q 只打印镜像id列

docker pull 镜像名:标签 //从镜像加速地址提供的镜像库下载镜像

docker save 镜像名:标签 -o 备份文件名(比如:mylinux.tar) 将本机的镜像归档备份

// -o 用于指定保存生成docker镜像归档文件(通常为.tar文件)

docker load -i 备份文件名 导入备份镜像

docker history 镜像名:标签 查看镜像制作历史

docker rmi 镜像:标签 //删除镜像

docker tag 镜像id 镜像名:标签 //给镜像重命名

Vlog~删除镜像

docker rmi 镜像:标签 删除镜像 //删除单个镜像,后加多个,可删除多个

//对于已创建的容器的镜像无法删除

docker rmi -f ... //强制删除

会打印出 : Untagged: ... // 该容器的标签已删除

通过docker images 查询发现"<none> <none> ....." //没有了镜像名和标签

可以通过docker log id ... 重命名

docker rmi -f $(docker images -q) //删除所有本机镜像

容器管理命令

docker run -it(d) --name 容器名 镜像名:标签 //创建容器 -i 启动容器时保留其标准输入(交互) -t 请求docker分配一个pty伪终端 -d 后台运行

// 或者可以通过ctrl p + ctrl q 跳出容器并保持容器后台运行

docker ps //查看运行中的容器 -a 查看所有容器 -p 只打印容器id列

docker inspect 镜像:容器 //查看容器详细信息

docker start/stop/restart 容器id/NAMES //启动/停止/重启容器

docker exec -it 容器id/NAMES 启动命令 //交互式对容器执行指令

docker cp 本机路径 容器NAMES:/路径 //本机和容器之间拷贝文件

docker rm 容器id/NAMES //删除容器 -f 强制删除

docker logs 容器id/NAMES //查看容器日志

容器运行后台后如何进入交互式

docker run -itd 镜像:容器名 创建容器之后运行在后台中, 通过 docker exec -it /bin/bash 交互式命令即可进入容器内

docker exec -it /bin/ls 打印主目录ls 非交互式

案例

简单镜像制作

bash 复制代码
# 使用基础镜像创建一个容器

[root@docker ~]# docker run -itd --name linux rockylinux:8.5

# 删除容器内的Yum配置文件

[root@docker ~]# docker exec -it linux rm -rf /etc/yum.repos.d

# 拷贝宿主机的Yum配置文件到容器内

[root@docker ~]# docker cp /etc/yum.repos.d linux:/etc/

# 在容器内安装工具软件包

[root@docker ~]# docker exec -it linux dnf install -y net-tools vim-enhanced tree bash-completion iproute procps-ng psmisc

# 清理缓存文件

[root@docker ~]# docker exec -it linux dnf clean all

# 停止容器

[root@docker ~]# docker stop linux

# 把容器制作成镜像

[root@docker ~]# docker commit linux mylinux:latest

sha256:7a4449e20f4c59d1f6c4db838b4724cbf63c8f4195513c5f17d053c7752891d5

# 查看新制作的镜像

[root@docker ~]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mylinux      latest    b64da40467ae   3 seconds ago   249MB
rockylinux   8.5       210996f98b85   13 months ago   205MB

# 删除制作镜像的容器

[root@docker ~]# docker rm -f linux 

linux

容器部署应用

  • 部署 apache 服务
bash 复制代码
# 删除所有容器

[root@docker ~]# docker rm -f $(docker ps -aq)

# 创建一个名为 myweb 的容器

[root@docker ~]# docker run -it --rm --name myweb mylinux:latest

#-----------------------------------------------------------

# 在容器内安装部署 apache

[root@a7f9d0c3e3e2 /]# dnf install -y httpd

[root@a7f9d0c3e3e2 /]# echo "Hello World ." >/var/www/html/index.html

[root@a7f9d0c3e3e2 /]# cat /usr/lib/systemd/system/httpd.service

[root@a7f9d0c3e3e2 /]# export LANG=C

[root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND

# 在另一个终端完成访问验证
  • 为 apache 添加解析 php 文件支持
bash 复制代码
# ctrl + c 终止 httpd 服务运行

[root@a7f9d0c3e3e2 /]# dnf install -y php

[root@a7f9d0c3e3e2 /]# vim /etc/httpd/conf.modules.d/00-mpm.conf

11: LoadModule mpm_prefork_module ... ... # 去掉注释 

17: # LoadModule mpm_event_module ... ... # 注释配置 

[root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND

# 服务不要关闭,在其他终端完成测试
  • 验证配置
bash 复制代码
# 在另一个终端拷贝 public/info.php 到 docker 主机

[root@docker ~]# docker cp info.php myweb:/var/www/html/

[root@docker ~]# curl http://172.17.0.2/info.php

<pre>
Array
(
    [REMOTE_ADDR] => 172.17.0.1
    [REQUEST_METHOD] => GET
    [HTTP_USER_AGENT] => curl/7.61.1
    [REQUEST_URI] => /info.php
)
php_host:   616e75df56ae
1229
相关推荐
biass12 分钟前
jenkins角色权限
运维·jenkins
tomorrow.hello14 分钟前
Jenkins Pipeline(二)
运维·jenkins
做一个AC梦29 分钟前
Docker安装失败:Docker Desktop installation failed
运维·docker·容器
Shan120531 分钟前
浅谈Docker Kicks in的应用
运维·docker·容器
Li&&Tao35 分钟前
docker 常用命令
docker·容器·eureka
Jiude2 小时前
MinIO 社区版被故意阉割,Web管理功能全面移除。我来试试国产RustFS
后端·docker·架构
飞询3 小时前
Docker 安装 Elasticsearch 9
elasticsearch·docker
Tipriest_3 小时前
Ubuntu常用的软件格式deb, rpm, dmg, AppImage等打包及使用方法
linux·运维·ubuntu
真智AI3 小时前
利用 Claude Opus 4 自动化 GitHub 工作流:从安装到实战详解
运维·自动化·github
胡斌附体4 小时前
linux测试端口是否可被外部访问
linux·运维·服务器·python·测试·端口测试·临时服务器