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
相关推荐
枫叶丹435 分钟前
【在Linux世界中追寻伟大的One Piece】进程信号
linux·运维·服务器
刻词梨木38 分钟前
ubuntu中挂载点内存不足,分配不合理后使用软链接的注意事项
linux·运维·ubuntu
灯火不休ᝰ2 小时前
[win7] win7系统的下载及在虚拟机中详细安装过程(附有下载文件)
linux·运维·服务器
HHoao5 小时前
Ubuntu启动后第一次需要很久才能启动GTK应用问题
linux·运维·ubuntu
小灰兔的小白兔5 小时前
【Ubuntu】Ubuntu常用命令
linux·运维·ubuntu
winds~5 小时前
ubuntu中软件的进程管理-结束软件运行
linux·运维·ubuntu
bush46 小时前
使用root账号ssh登录虚拟机ubuntu
运维·ubuntu·ssh
叫我龙翔7 小时前
【Linux】进程间关系与守护进程
linux·运维·服务器·计算机网络
S hh7 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习
唐大爹7 小时前
项目实战:k8s部署考试系统
云原生·容器·kubernetes