做公司企业网站,医院网站建设报价表,施工企业名词解释,建论坛网站需要多少空间1、镜像管理命令 docker images #查看本机镜像
[rootdocker-0001 ~]# docker imagesdocker search 镜像名称 #从官方仓库查找镜像
[rootdocker-0001 ~]# docker search busybox #需要联网#xff0c;本次不用操作docker pull 镜像名称:标签 #下载镜像
[rootdocke…1、镜像管理命令 docker images #查看本机镜像
[rootdocker-0001 ~]# docker imagesdocker search 镜像名称 #从官方仓库查找镜像
[rootdocker-0001 ~]# docker search busybox #需要联网本次不用操作docker pull 镜像名称:标签 #下载镜像
[rootdocker-0001 ~]# docker pull busybox #从华为的镜像加速站下载docker save 镜像名称:标签 -o 备份镜像名称.tar #备份导出镜像为tar包
[rootdocker-0001 ~]# docker save busybox:latest -o busybox.tardocker load -i 备份镜像名称 #恢复导入备份的镜像文件
[rootdocker-0001 ~]# scp busybox.tar 192.168.1.32:/root
[rootdocker-0002 ~]# docker load -i busybox.tardocker rmi 镜像名称:标签 #删除镜像
[rootdocker-0002 ~]# docker rmi busybox:latest docker history 镜像名称:标签 #查看镜像的制作历史
[rootdocker-0001 ~]# docker history centos:7 docker inspect 镜像名称:标签 #查看镜像的详细信息
[rootdocker-0001 ~]# docker history centos:7
[rootdocker-0001 ~]# docker inspect myos:httpd docker tag 镜像名称:标签 新的镜像名称:新的标签 #创建新的镜像名称和标签
[rootdocker-0001 ~]# docker tag busybox:latest nsd:test
[rootdocker-0001 ~]# docker images 拷贝教学环境镜像到docker-0001主机并导入
[rootecs-proxy ~]# scp /root/5/public/myos.tar.xz 192.168.1.31:/root/
[rootdocker-0001 ~]# docker load -i myos.tar.xz容器管理命令 启动容器
docker run 命令docker run -参数 镜像名称:镜像标签 启动命令
docker-0001根据myos:v2009镜像启动并进入一个容器
[rootdocker-0001 ~]# docker run -it myos:v2009 /bin/bash #/bin/bash为容器内的命令,容器内存在才可以使用[root89d1ec3a0dc8 /]# exit
[rootdocker-0001 ~]# docker run -itd myos:httpd #启动httpd是个服务要加d放后台才能运行启动容器时指定名字
[rootdocker-0001 ~]# docker run -itd --name apache myos:httpd 查看容器docker ps [ -a 所有容器id ] [ -q 只显示容器 id ]
[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用于脚本对容器的管理删除容器docker rm 容器id
[rootdocker-0001 ~]# docker rm 512567e6f64f删除正在使用的容器时会报错无法删除需要先停止容器再执行删除命令
[rootdocker-0001 ~]# docker stop 512567e6f64f #停止容器
[rootdocker-0001 ~]# docker rm 512567e6f64f删除所有的容器支持命令行重录前一个命令的结果可以作为后一个命令的参数
[rootdocker-0001 ~]# docker rm -f $(docker ps -aq) #$()用来获取命令的执行结果临时启动容器 --rm容器结束后自动删除在内存中运行退出后直接没有
第一个终端启动centos:7容器
[rootdocker-0001 ~]# docker run -it --name test1 centos:7
[roote5f780c059f6 /]# 第二个终端查看可以看到结果
[rootdocker-0001 ~]# docker ps | grep test1回到第一个终端退出容器
[roote5f780c059f6 /]# exit在第二个终端查看可以看到已经停止但是容器还在没有删除
[rootdocker-0001 ~]# docker ps -a | grep test1此时在第一个终端再次创建一个容器test2加上--rm的选项查看结果
[rootdocker-0001 ~]# docker run -it --name test2 --rm centos:7第二个终端查看可以看到结果
[rootdocker-0001 ~]# docker ps | grep test2回到第一个终端退出容器
[roote5f780c059f6 /]# exit在第二个终端查看可以看到已经停止但是容器已经没有
[rootdocker-0001 ~]# docker ps -a | grep test2容器管理命令启动、停止、重启- [x] docker start 容器id- [x] docker stop 容器id- [x] docker restart 容器id[rootdocker-0001 ~]# docker rm -f $(docker ps -aq)
[rootdocker-0001 ~]# docker run -itd myos:nginx
查看容器信息docker inspect 容器id
[rootdocker-0001 ~]# docker inspect 38b8ee2a8754
......Gateway: 172.17.0.1,IPAddress: 172.17.0.2,
......
[rootdocker-0001 ~]# curl http://172.17.0.2
Nginx is running ![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 --name test myos:v2009 #另外开一个docker-0001的终端操作
[rootdocker-0001 ~]# docker cp /root/busybox.tar test:/root/ 在刚刚启动的第一个容器终端中查看结果
[rootb6a1ab762bd5 /]# ls /root/
busybox.tar拷贝容器内文件到宿主机
[rootdocker-0001 ~]# docker cp test:/etc/hosts ./
[rootdocker-0001 ~]# ls #有hosts文件
busybox.tar hosts myos.tar.xz# 查看容器日志 docker logs 容器ID
[rootdocker-0001 ~]# docker run -itd myos:nginx
[rootdocker-0001 ~]# docker logs 99d #99d为nginx容器的idlogs查看没有信息[rootdocker-0001 ~]# docker inspect 99d
[rootdocker-0001 ~]# curl 172.17.0.3/wfr #访问一个不存在的页面
html
headtitle404 Not Found/title/head
body
centerh1404 Not Found/h1/center
hrcenternginx/1.17.6/center
/body
/html
[rootdocker-0001 ~]# docker logs 99d #再次查看有有信息
2023/06/11 12:45:32 [error] 7#0: *1 open() /usr/local/nginx/html/wfr failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: GET /wfr HTTP/1.1, host: 172.17.0.3但是如果apache的服务也是同样测试可能结果就不显示是因为软件原因连接容器启动新进程docker exec -it 容器id 命令
[rootdocker-0001 ~]# docker run -it myos:v2009
[root164a7b1a6c57 /]# exit #此时容器时关闭的[rootdocker-0001 ~]# docker start 164a7b1a6c57 #启动myos:v2009的容器
[rootdocker-0001 ~]# docker exec -it 164a7b1a6c57 /bin/bash #根据容器ID进入容器
[root164a7b1a6c57 /]# ps -ef #两个bash进程
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:49 pts/0 00:00:00 /bin/bash
root 42 0 0 12:50 pts/1 00:00:00 /bin/bash
root 63 42 0 12:50 pts/1 00:00:00 ps -ef
[root164a7b1a6c57 /]# exit #退出连接容器启动进程:docker attach 容器id
attach 以上帝进程的身份进入容器内部当执行exit退出容器时会结束整个容器通常用于在测试时查看报错信息
[rootdocker-0001 ~]# docker attach 164a7b1a6c57
[root164a7b1a6c57 /]# ps -ef #一个bash进程上帝进程
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:49 pts/0 00:00:00 /bin/bash
root 64 1 0 12:52 pts/0 00:00:00 ps -ef
[root164a7b1a6c57 /]# exit #退出容器关闭[rootdocker-0001 ~]# docker start 164a7b1a6c57 #启动被关闭容器
[rootdocker-0001 ~]# docker attach 164a7b1a6c57 #Ctrl p q 退出容器但不会停止容器的运行#在对容器的使用过程中都是使用exec新开一个进程的方式进入容器进行操作
#而attach 往往应用于容器内部进行交互、排查问题、调试等操作简单镜像制作
获取基础镜像
方法一docker-0001主机备份centos:7镜像拷贝到docker-0002导入
[rootdocker-0001 ~]# docker save centos:7 -o centos.tar
[rootdocker-0001 ~]# scp centos.tar 192.168.1.32:/root/
[rootdocker-0002 ~]# docker load -i centos.tar 方法二docker-0002主机直接下载
[rootdocker-0002 ~]# docker pull centos:7commit 自定义镜像
使用镜像启动容器在该容器基础上修改另存为一个新镜像- [x] docker run -it centos:latest /bin/bash- [x] 配置 yum安装软件系统配置- [x] docker commit 容器id 新镜像名称: 新镜像标签在docker-0001创建一个centos的容器
[rootdocker-0002 ~]# docker run -it --name mycentos centos:7
[rootcb458c4e9ede /]# cd /etc/yum.repos.d/
[rootcb458c4e9ede yum.repos.d]# rm -rf *
[rootcb458c4e9ede yum.repos.d]# curl http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo -so /etc/yum.repos.d/CentOS-Base.repo #下载华为云的yun仓库
[rootcb458c4e9ede yum.repos.d]# yum -y install net-tools psmisc iproute vim-enhanced bash-completion tree
[rootcb458c4e9ede yum.repos.d]# yum clean all #清除yum缓存减小容器大小用于镜像制作
[rootcb458c4e9ede yum.repos.d]# exit commit 提交容器生成新的镜像mycentos为容器的名字
[rootdocker-0002 ~]# docker commit mycentos mycentos:latest
[rootdocker-0002 ~]# docker images #mycentos就是新生成的镜像
[rootdocker-0002 ~]# docker rm mycentos #删除容器使用 docker run 验证新的镜像
[rootdocker-0002 ~]# docker history mycentos:latest #查看历史镜像多出一个镜像层
[rootdocker-0002 ~]# docker run -it mycentos:latest
[rootaa14feea7b4e /]# yum repolist
[rootaa14feea7b4e /]# ifconfig
[rootaa14feea7b4e /]# exit容器内部署应用
删除之前所有的容器
[rootdocker-0002 ~]# docker rm -f $(docker ps -aq)
[rootdocker-0002 ~]# docker run -it --name myapache mycentos:latest此时就可以在容器里面安装相关的软件包
[roote0e8f8596277 /]# yum -y install httpd php
[roote0e8f8596277 /]# echo hello world /var/www/html/index.html
[roote0e8f8596277 /]# pstree -p #只有bash的进程#因为容器内并没有systemd的服务无法使用systemctl来启动httpd的服务
#查看httpd的服务文件获取环境变量文件和服务启动命令
[roote0e8f8596277 /]# cat /lib/systemd/system/httpd.service
........
[Service]
EnvironmentFile/etc/sysconfig/httpd #环境变量文件
ExecStart/usr/sbin/httpd $OPTIONS -DFOREGROUND #启动命令$OPTIONS 此环境变量为空可以不用写
[roote0e8f8596277 /]# cat /etc/sysconfig/httpd #从环境变量文件中获取环境变量
......
LANGC
[roote0e8f8596277 /]# export LANGC #设置语言避免出现不必要的字符集问题不然容易出现乱码
[roote0e8f8596277 /]# /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另外开一个docker-0002终端通过提示的地址172.17.0.2
[rootdocker-0002 ~]# curl 172.17.0.2
hello world此时容器内容的终端是被占用的是在前台运行的如果关闭不能够再次访问httpd若想要退出使用ctrl pq
[rootdocker-0001 ~]# docker exec -it myapache /bin/bash
[roote0e8f8596277 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:17 pts/0 00:00:00 /bin/bash
root 27 1 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
apache 28 27 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
apache 29 27 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
apache 30 27 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
apache 31 27 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
apache 32 27 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
root 54 0 0 13:27 pts/1 00:00:00 /bin/bash
root 76 54 0 13:27 pts/1 00:00:00 ps -ef
[roote0e8f8596277 /]# exit补充
名称空间 是指可以对系统资源空间进行分割隔离的技术例如创建一个虚拟机在虚拟机里的所有操作都不会对真实机造成影响。名称空间分为六大类可以从各个方面来对系统资源空间进行隔离UTS、NETWORK、MOUNT、USER、PID、IPCUTS #主机名命名空间作用分割主机名即在容器内修改主机名不会对宿主机的系统造成影响实现主机名的隔离NETWORK网络命名空间作用分割网络即容器内的网络配置和宿主机之间相互不受干扰例如#在真实机器上的网卡名为ens33,IP地址为192.168.1.10/24#而在容器内的网卡名可以为eth0ip地址为10.10.10.10/24 MOUNT:#挂载命名空间作用隔离文件系统在容器内挂载的光盘宿主机是无法看到里面的内容的例如#在linux系统上创建一个虚拟机在真机的/var/lib/ftp中挂载了一个光盘文件但是在虚拟机的/var/lib/ftp中是没有光盘内容的这就是MOUNT隔离USER:#用户命名空间作用隔离用户即容器内创建的用户不能用于登录宿主机真机机里创建的用户也不能作用于容器PID:#进程命名空间作用为了防止容器和宿主机中的进程冲突例如#在真实机中有一个服务: nfsPID为2250#在容器内也有一个服务: chronyPID为2250#真实机中用户杀死(kill) PID号为2250的进程时并不会对容器内的进程2250产生影响#而容器内的用户杀死(kill) PID号为2250的进程时也并不会对真实机内的进程2250产生影响IPC:#信号向量命名空间作用通常和PID一起使用#用户杀死一个进程时实际上是向进程发送一个信号(IPC)进程接收到这个信号后会执行对应的操作