Docker

发布于:2024-04-21 ⋅ 阅读:(272) ⋅ 点赞:(0)

概述

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

Docker的容器中没系统

开放理念

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

安装部署

# 开启路由转发功能
[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  非交互式

案例

简单镜像制作

# 使用基础镜像创建一个容器

[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 服务
# 删除所有容器

[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 文件支持
# 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

# 服务不要关闭,在其他终端完成测试
  • 验证配置
# 在另一个终端拷贝 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


网站公告

今日签到

点亮在社区的每一天
去签到