南京个人网站建设企业在线咨询服务系统
web/
2025/9/28 20:00:00/
文章来源:
南京个人网站建设,企业在线咨询服务系统,专业做网站的公司 郑州,沁阳企业自助建站文章目录 Docker简介什么是容器命名空间#xff1a; Docker 的优缺点 Docker安装Docker镜像管理什么是镜像镜像管理 Docker容器管理运行容器容器启动、停止、重启拷贝文件进入容器容器与应用 DockerfileDockerfile 语法案例 总结 Docker简介
什么是容器 容器是用来装东西的 Docker 的优缺点 Docker安装Docker镜像管理什么是镜像镜像管理 Docker容器管理运行容器容器启动、停止、重启拷贝文件进入容器容器与应用 DockerfileDockerfile 语法案例 总结 Docker简介
什么是容器 容器是用来装东西的Linux 里面的容器是用来装应用的 容器就是将软件打包成标准化单元以用于开发、交付和部署 容器技术已经成为应用程序封装和交付的核心技术 容器原理容器技术的核心由以下几个内核技术组成 Cgroups (Control Groups) 资源管理SELinux安全 (是针对于文件系统文件的管理措施)NameSpace命名空间
命名空间
是指可以对系统资源空间进行分割隔离的技术例如创建一个虚拟机在虚拟机里的所有操作都不会对真实机造成影响。命名空间分为六大类可以从各个方面来对系统资源空间进行隔离 UTS主机名隔离NETWORK网络隔离MOUNT文件系统隔离USER用户隔离PID进程隔离IPC信号向量隔离
Docker 的优缺点 优点 相比于传统的虚拟化技术容器更加简洁高效传统虚拟机需要给每个 VM 安装操作系统容器使用的共享公共库和程序 缺点 容器的隔离性没有虚拟机强共用Linux内核安全性有先天缺陷 Docker
使用模板机的克隆以下机器配置如下
主机名IP地址内存CPUdocker-0001192.168.8.1072G2docker-0002192.168.8.1082G2
docker-0001配置IP地址和主机名
[rootlocalhost ~]# hostnamectl set-hostname docker-0001
[rootdocker-0001 ~]# nmcli connection modify ens33 ipv4.method auto connection.autoconnect yes
[rootdocker-0001 ~]# nmcli connection up ens33
[rootdocker-0002 ~]# yum clean all
[rootdocker-0002 ~]# yum repolistdocker-0002配置IP地址和主机名
[rootlocalhost ~]# hostnamectl set-hostname docker-0002
[rootdocker-0002 ~]# nmcli connection modify ens33 ipv4.method auto connection.autoconnect yes
[rootdocker-0002 ~]# nmcli connection up ens33
[rootdocker-0002 ~]# yum clean all
[rootdocker-0002 ~]# yum repolistDocker安装
docker安装两台主机都要安装以docker-0001为例
开启路由转发docker是通过虚拟交换机来进行通讯的需要开启路由转发的功能
[rootdocker-0001 ~]# echo net.ipv4.ip_forward 1 /etc/sysctl.conf
[rootdocker-0001 ~]# sysctl -p #sysctl -p 让配置立刻生效否则需要重启虚拟机
[rootdocker-0001 ~]# yum -y install docker
[rootdocker-0001 ~]# systemctl enable --now docker #启动docker服务Docker镜像管理
什么是镜像 镜像是启动容器的核心 在Docker 中容器是基于镜像启动的 镜像采用分层设计使用 COW 技术 容器本身是没有操作系统和宿主机共用一个操作系统 容器是docker(容器的管理工具)使用镜像文件来启动的 镜像是启动容器的模板镜像中存放的是应用程序(服务软件)例如: 有一个http的镜像文件在这个镜像中就存放的是http的所有文件和变量 用户使用镜像启动容器时会生成一个独立于镜像的容器层并不会对镜像层产生任何影响 而且容器采用了cow(写时复制)的技术用户可以使用一个镜像文件创建多个容器互不干扰 镜像采用分层技术 用户可以根据自己的需求来制作镜像例如:在镜像的第一层定义应用程序的变量在镜像的第二层修改配置文件在镜像的第三层进行应用软件的部署分层做好镜像后用户使用镜像启动容器时,可以选择根据镜像的哪一层来启动类似快照还原 镜像来源 镜像可以从官方镜像仓库下载https://hub.docker.com自己制作
镜像管理
docker images #查看本机镜像docker search 关键词 #查找包含关键词的镜像docker pull 镜像名称:标签 #下载镜像docker rmi 镜像名称:标签 #删除镜像docker history 镜像名称: 镜像标签 #查看镜像的制作历史docker inspect 镜像名称: 镜像标签 #查看镜像的信息docker tag 镜像名称: 镜像标签 新镜像名称: 新的标签 #为镜像的打新名称和标签
[rootdocker-0001 ~]# docker images #还没有导入镜像所以没有镜像[rootdocker-0001 ~]# docker search busybox
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
busybox Busybox base image. 2010 [OK] [rootdocker-0001 ~]# docker pull busybox查看镜像
[rootdocker-0001 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 6858809bf669 4 weeks ago 1.232 MB
#REPOSITORY 镜像名称
#TAG 镜像标签
#IMAGE ID 镜像ID号
#CREATED 镜像创建时间
#SIZE 镜像大小镜像的备份与恢复
镜像备份docker save 镜像名称:镜像标签 -o 备份文件夹(tar格式)镜像恢复(导入镜像)docker load -i 备份文件名称
docker-0001导出镜像备份
[rootdocker-0001 ~]# docker save busybox:latest -o /root/busybox.tar
#导出镜像busybox,需要指定名字和标签导出到/root目录下名称为busybox.tar
#名称和路径可以随意指定拷贝备份镜像到docker-0002上
[rootdocker-0001 ~]# scp /root/busybox.tar 192.168.8.108:/root/docker-0002恢复镜像
[rootdocker-0002 ~]# docker load -i busybox.tar
[rootdocker-0002 ~]# docker images 教学环境中将docker-images目录上传到docker-0001的/root下并导入这四个镜像到docker里面
[rootdocker-0001 ~]# cd docker-images
[rootdocker-0001 docker-images]# for i in *.tar.gzdodocker load -i $idonedocker-0001看镜像的制作历史
[rootdocker-0001 ~]# docker history centos:latest #由下到上镜像可以分为3层 查看镜像的信息
[rootdocker-0001 ~]# docker inspect centos:latest
[rootdocker-0001 ~]# docker inspect nginx:latest
..........Cmd: [ # Cmd 默认的启动命令即启动容器时默认的启动命令nginx,-g,daemon off;],
..........docker-0001为镜像busybox:lastest打的新名称和标签
[rootdocker-0001 ~]# docker tag busybox:latest xxhh:testdocker-0001删除镜像
[rootdocker-0002 ~]# docker rmi busybox:latestDocker容器管理
运行容器
docker run -参数 镜像名称:镜像标签 启动命令 #创建运行进入容器命令docker ps [-a] [-q] #查看容器docker rm [-f] #删除容器-f强制
docker-0001根据centos镜像启动并进入一个容器
[rootdocker-0001 ~]# docker run -it centos:latest /bin/bash #/bin/bash为容器内的命令,容器内存在才可以使用
[root89d1ec3a0dc8 /]# exit
[rootdocker-0001 ~]# docker run -itd nginx:latest #启动nginx是个服务要加d放后台才能运行查看容器
[rootdocker-0001 ~]# docker ps
[rootdocker-0001 ~]# docker ps -a #ps -a 查看创建的所有的容器(运行的和已经停止的)
[rootdocker-0001 ~]# docker ps -q #ps -q 查看运行中容器的ID值
[rootdocker-0001 ~]# docker ps -aq #ps -aq查看所有容器的id,用于脚本对容器的管理删除容器容器ID不能照抄每个人都不一样
[rootdocker-0001 ~]# docker rm 512567e6f64f删除正在使用的容器时会报错无法删除需要先停止容器再执行删除命令
[rootdocker-0001 ~]# docker stop 512567e6f64f #停止容器
[rootdocker-0001 ~]# docker rm 512567e6f64f删除所有的容器支持命令行重录前一个命令的结果$(docker ps -aq)可以作为后一个命令的参数
[rootdocker-0001 ~]# docker rm -f $(docker ps -aq) #$()用来获取命令的执行结果容器启动、停止、重启
docker start 容器id #启动容器docker stop 容器id #停止容器docker restart 容器id #重启容器
[rootdocker-0001 ~]# docker run -itd nginx:latest 查看容器信息
[rootdocker-0001 ~]# docker inspect 38b8ee2a8754
......Gateway: 172.17.0.1,IPAddress: 172.17.0.2,
......
[rootdocker-0001 ~]# curl http://172.17.0.2
titleWelcome to nginx!/title
............ [rootdocker-0001 ~]# docker stop 38b8ee2a8754 #停止容器
[rootdocker-0001 ~]# docker start 38b8ee2a8754 #启动容器
[rootdocker-0001 ~]# docker restart 38b8ee2a8754 #重启容器拷贝文件 docker cp 本机文件路径 容器id:容器内路径上传 docker cp 容器id:容器内路径 本机文件路径下载
在第一个终端中执行
[rootdocker-0001 ~]# docker run -it centos:latest
[root69f7753eb1e8 /]# cd /etc/yum.repos.d/
[root69f7753eb1e8 yum.repos.d]# rm -rf *#另外开一个docker-0001的终端操作
[rootdocker-0001 ~]# docker cp /etc/yum.repos.d/CentOS-Base.repo 69f7753eb1e8:/etc/yum.repos.d/Centos-base.repo
[root69f7753eb1e8 yum.repos.d]# yum -y install net-tools #在容器里面可以正常使用
[root69f7753eb1e8 yum.repos.d]# ifconfig
[root69f7753eb1e8 yum.repos.d]# exit进入容器 docker exec -it 容器id 命令 docker attach 容器id
[rootdocker-0001 ~]# docker ps -a #查看正在使用的容器
[rootdocker-0001 ~]# docker start 69f7753eb1e8 #启动centos的容器
[rootdocker-0001 ~]# docker exec -it 69f7753eb1e8 /bin/bash #根据centos容器ID进入容器
[root69f7753eb1e8 /]# ps -ef #两个bash进程
[root69f7753eb1e8 /]# exit #退出attach 以上帝进程的身份进入容器内部当执行exit退出容器时会结束整个容器通常用于在测试时查看报错信息
[rootdocker-0001 ~]# docker attach 69f7753eb1e8 #Ctrl p q 退出容器但不会停止
[root69f7753eb1e8 /]# ps -ef #一个bash进程上帝进程
[root69f7753eb1e8 /]# exit #退出容器关闭[rootdocker-0001 ~]# docker start 69f7753eb1e8 #启动被关闭容器
[rootdocker-0001 ~]# docker attach 69f7753eb1e8 #Ctrl p q 退出容器但不会停止容器的运行
在对容器的使用过程中都是使用exec新开一个进程的方式进入容器进行操作而attach 往往应用于调试终端输出的情况
容器与应用 删除之前所有的容器
[rootdocker-0001 ~]# docker rm -f $(docker ps -aq)重新运行容器
[rootdocker-0001 ~]# docker run -it --name myapache centos:latest
[rootd7cfa9370097 /]# cd /etc/yum.repos.d/
[rootd7cfa9370097 yum.repos.d]# rm -rf *把宿主机的yum文件拷贝给刚刚启动的容器
[rootdocker-0001 ~]# docker cp /etc/yum.repos.d/CentOS-Base.repo myapache:/etc/yum.repos.d/CentOS-Base.repo此时就可以在容器里面安装相关的软件包
[rootd7cfa9370097 yum.repos.d]# yum -y install httpd php psmisc iproute net-tools
[rootd7cfa9370097 yum.repos.d]# pstree -p因为容器内并没有systemd的服务无法使用systemctl来启动httpd的服务
查看httpd的服务文件获取环境变量文件和服务启动命令
[rootd7cfa9370097 /]# cat /lib/systemd/system/httpd.service
........
[Service]
EnvironmentFile/etc/sysconfig/httpd #环境变量文件
ExecStart/usr/sbin/httpd $OPTIONS -DFOREGROUND#启动命令$OPTIONS 此环境变量为空可以不用写[rootd7cfa9370097 /]# cat /etc/sysconfig/httpd #从环境变量文件中获取环境变量
......
LANGC
[rootd7cfa9370097 html]# echo hello world /var/www/html/index.html
[rootdcfa9370097 /]# /usr/sbin/httpd -DFOREGROUND #启动httpd服务
AH00558: httpd: Could not reliably determine the servers fully qualified domain name, using 172.17.0.2. Set the ServerName directive globally to suppress this message可以在宿主机测试通过提示的地址172.17.0.2IP地址不要照抄
[rootdocker-0001 ~]# curl 172.17.0.2
hello world此时容器内容的终端是被占用的是在前台运行的如果关闭不能够再次访问httpd
若想要退出使用ctrl pq
[rootdocker-0001 ~]# docker exec -it d7cfa9370097 /bin/bash
[rootd7cfa9370097 /]# pstree -p
bash(1)---httpd(66)--httpd(67)|-httpd(68)|-httpd(69)|-httpd(70)-httpd(71)
[rootd7cfa9370097 /]# exitDockerfile
Dockerfile是用于构建Docker镜像的文本文件。它包含一组指令用于描述镜像的基础操作以及打包应用程序运行所需的所有依赖项。
Dockerfile 语法
FROM基础镜像RUN制作镜像时执行的命令可以有多个ADD复制文件到镜像自动解压 (文件类型为: tar.gz 或 tar.bz2)COPY复制文件到镜像不解压MAINTAINER镜像创建者信息EXPOSE开放的端口ENV设置变量WORKDIR定义容器默认工作目录(等于cd)CMD: 容器启动时执行的命令仅可以有一条CMD若多条会覆盖最后一条生效 CMD 容器的默认启动命令可以自己定义也可以使用默认的Dockerfile中不指定CMD时则使用默认的启动命令如果没有使用CMD指定启动命令则会继承上一个镜像的默认启动命令CMD 容器的默认启动命令有且只能有一条
使用 Dockerfile 工作流程
mkdir buildcd build编写 Dockerfile根据Dockerfile生成新的镜像docker build -t imagename Dockerfile所在目录
案例
创建支持httpd服务镜像
因为容器内并没有systemd的服务无法使用systemctl来启动httpd的服务 查看httpd的服务文件获取环境变量文件和服务启动命令
[roota670096c60ad /]# cat /lib/systemd/system/httpd.service
........
[Service]
EnvironmentFile/etc/sysconfig/httpd #环境变量文件
ExecStart/usr/sbin/httpd $OPTIONS -DFOREGROUND #启动命令$OPTIONS此环境变量为空
[roota670096c60ad /]# vim /etc/sysconfig/httpd #从环境变量文件中获取环境变量
......
LANGC
[roota670096c60ad /]# LANGC #设置环境变量
[root54cb8bfa063d /]# /usr/sbin/httpd -DFOREGROUND #启动httpd服务Ctrl C 退出编写httpd的Dockerfile文件从这里开始做
[rootdocker-0001 ~]# mkdir web
[rootdocker-0001 ~]# cd web/
[rootdocker-0001 web]# vim Dockerfile
FROM docker.io/centos:latest
RUN yum -y install httpd php
ENV LANGC
EXPOSE 80
WORKDIR /var/www/html
COPY index.html /var/www/html/
CMD [/usr/sbin/httpd,-DFOREGROUND]生成index.html
[rootdocker-0001 web]# echo 123 index.htmlbuild 创建新的镜像-t 指定新镜像的名字和标签. 指定Dockerfile文件所在的目录
[rootdocker-0001 web]# docker build -t myos:httpd .[rootdocker-0001 web]# docker images
[rootdocker-0001 web]# docker run -itd myos:httpd #后台启动容器因为是一个服务
[rootdocker-0001 web]# docker ps #查看正在使用的容器
[rootdocker-0001 web]# docker inspect 800b21aa9736 #查看容器的详细信息
[rootdocker-0001 web]# curl http://172.17.0.2/ #IP地址不要抄总结
掌握Docker容器管理平台掌握镜像和容器的关系掌握镜像管理命令掌握容器管理命令掌握Dockerfile语法格式
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83502.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!