docker入门到放弃
1.容器简介
Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup,namespace,Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器。
Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
容器不就是虚拟化吗
是,但也不竟然。
虚拟化使得许多操作系统可同时在单个系统上运行。
容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。
容器和虚拟化的区别
ux容器技术,容器虚拟化和kvm虚拟化的区别 kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)
linux开机启动流程: bios开机硬件自检 basic input output system 根据bios设置的优先启动项boot 网卡 硬盘 u盘 光驱 读取mbr引导 2T UEFI(gpt分区) mbr硬盘分区信息,内核加载路径,
加载内核 启动第一个进程/sbin/init systemd 系统初始化完成 运行服务(nginx,httpd,mysql)
容器启动流程: 共用宿主机内核: 第一个进程直接启动服务(nginx,httpd,mysql)
容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,只能运行在linux系统上 虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统
官方文档
https://docs.docker.com/install/linux/docker-ce/centos/
2.安装
2.1卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.2替换阿里云yum源
curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3配置宿主机网卡转发
## 配置网卡转发,看值是否为1
sysctl -a |grep -w net.ipv4.ip_forward
net.ipv4.ip_forward = 1
## 若未配置,需要执行如下
cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
EOF
sysctl -p /etc/sysctl.d/docker.conf
2.4安装docker-ce
默认是安装最新稳定版本
yum clean all && yum makecache
## yum安装
yum install -y docker-ce
## 查看源中可用版本
yum list docker-ce --showduplicates | sort -r
## 安装指定版本
##yum install -y docker-ce-18.09.9
2.5配置阿里云镜像加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://u7vs31xg.mirror.aliyuncs.com"]
}
EOF
2.6启动docker服务
systemctl start docker #启动docker stop restart
systemctl enable docker #开机启动docker systemctl daemon-reload
systemctl status docker #查看docker状态
2.7卸载
1. systemctl stop docker
2. systemctl diable docker
3. yum remove docker-ce
4. rm -rf /var/lib/docker
3.体系
4.镜像管理
4.1镜像获取
方式一 docker hub 获取 Dockerfile
新建一个文件夹,新建一个文件 Dockerfile
执行docker build 进行构建:
docker build -t centos:v1
使用v1版本的镜像启动一个容器:
docker run -d -p 80:80 centos:v1 -g "daemon off;" #夯住
方式二
docker search centos #搜索镜像
下载镜像
docker pull centos:7.5 #冒号之后是版本,不加默认选择最新稳定版
查看新构建的镜像:
docker images
有/的是 别人写的 没有/是官方的
也可以第三方pull 例如时速云
4.2标识镜像的唯一性方法
方法1
REPOSITORY:TAG
如,centos:7.5.1804
方法2
IMAGE ID (sha256:64位的号码,默认只取12位)
docker image ls --no-trunc #查看详细信息
4.3镜像详细查看
docker image inspect 镜像名:TAG
docker image inspect ID
4.4查看镜像ID
docker image ls -q
4.5镜像的导入和导出
docker save ID(镜像名:版本号) >/www/centos.tar #-o
docker image rm -f ID
docker image load -i /www/centos.tar
打标签
docker image tag ID 镜像名:版本号
4.6镜像删除
docker image rm -f ID
docker image rm -f `docker image ls -q` #删除所有的 -q静默状态
5.容器管理
5.1交互式容器
docker run -it 0f3e07c0138f #-i: 交互式操作。 -t: 终端。
查看正在启动的容器
pstree
docker ps # -a 查看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e2c15223ea8 0f3e07c0138f "/bin/bash" 11 minutes ago Up 11 minutes kind_dijkstra
CONTAINER ID #容器的唯一标识码
NAMES #容器的名字不能重复 可以手动生成
docker run -it --name="zbb" 0f3e07c0138f
COMMAND #启动容器运行的命令
STATUS #运行状态
5.2守护式容器
docker run -d --name='zxy' nginx:1.14 #-d 以守护式启动,不手动结束不会停止
#默认 没有镜像 会自动下载
docker container inspect zxy #查看容器详细信息 container默认可以不写
--restart always #开机自启
5.3两类容器使用场景
交互式一般用于测试 ,工具,临时任务 用完退出就停止了,但是不会删除,以后会越来越多
docker rm -f kind_dijkstra #删除容器
run -it --name='zbbdentos' --rm 0f3e07c0138f #加rm使用完会自动删除
守护式,如tomcat等软件
docker默认只能内部访问,必须提供端口才能对外访问
docker run -d -p 8080:80 --name='zbb_nginx' nginx:1.14
5.4docker启停
守护式容器
docker create zxy
docker stop zxy
docker start zxy
docker restart zxy
docker kill zxy
交互式
docker stop zxy
docker start -i zxy #不加-i连接不进去....只能输入以下命令菜能进入
## 资源限制,-cpuset-cpus用于设置容器可以使用的 vCPU 核。-c,--cpu-shares用于设置多个容器竞争 CPU 时,各个容器相对能分配到的 CPU 时间比例。假设有三个正在运行的容器,这三个容器中的任务都是 CPU 密集型的。第一个容器的 cpu 共享权值是 1024,其它两个容器的 cpu 共享权值是 512。第一个容器将得到 50% 的 CPU 时间,而其它两个容器就只能各得到 25% 的 CPU 时间了。如果再添加第四个 cpu 共享值为 1024 的容器,每个容器得到的 CPU 时间将重新计算。第一个容器的CPU 时间变为 33%,其它容器分得的 CPU 时间分别为 16.5%、16.5%、33%。必须注意的是,这个比例只有在 CPU 密集型的任务执行时才有用。在四核的系统上,假设有四个单进程的容器,它们都能各自使用一个核的 100% CPU 时间,不管它们的 cpu 共享权值是多少。
$ docker run --cpuset-cpus="0-3" --cpu-shares=512 --memory=500m nginx:alpine
5.5容器的连接
docker attach zbb #进入容器 不推荐使用
子进程的方式登录
[root@docker ~]# docker exec -it zbb /bin/bash
exec进入调试 ,这样ctrl + D exit 就不会退出容器
#原理是又开了一个 /bin/bash
容器的后台及前台运行
- ctrl + p ,q
- attach 调用到前台
5.6删除所有容器
docker rm -f `docker ps -a -q`
5.7容器的网络访问
docker启动的所有容器都是可以内部访问的
docker run -d -p 8080:80 --name='zzb_n1' nginx:1.14
将nginx的80映射到宿主的8080上
映射多个端口
docker run -d -p 8080:80 --name='zzb_n2' nginx:1.14
5.8docker管理命令
docker top zzb_n1 #查看进程
UID PID PPID C STIME TTY
root 9923 9907 0 20:27 ? ss nginx -g daemon off;
101 9955 9923 0 20:27 ? ss
docker logs zzb_n1
#-f 持续监控日志
#-t 显示详细时间
#--tail 10 只显示10行
23.112.18.xx - - [04/Nov/2019:12:27:17 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36" "-"
6.数据卷使用
在nginx镜像中无法编辑
在外部创建好文件 cp到对应的目录中 ,手动交互数据
docker cp index.html n1:/usr/share/nginx/html
docker cp n1:/usr/share/nginx/html/index.html ./
#但是这样太麻烦了
Volume实现宿主和容器相通
docker run -d --name='n1' -p80:80 -v /html:/usr/share/nginx/html nginx:1.14
作用数据持久化
docker volues ls 查看挂载的卷 #容器删除了卷还在,新起一个容器挂载相同的卷,即可
/var/lib/docker/volumes/
容器挂载容器 用于批量挂载相同目录的容器,
在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,
docker run -d -p 81:80 --volumes-from n1 --name "nn1" nginx:1.14
进入
docker exec -it nn1 /bin/bash #挂载的所有文件同步
7.制造本地局域网yum源
一般无需配置
7.1安装
yum install -y vsftpd
7.2启动
systemctl start vsftpd
7.3上传系统镜像
centos7 的镜像上传到服务器
7.4配置
mkdir -p /var/ftp/centos.7.5
mount -o loop /mnt/centos.7.5.iso /var/ftp/centos.7.5
cat >/etc/yum.repos.d/ftp_7.repo <<EOF
[ftp]
name=ftpbase
baseurl=ftp://172.168.2.2/centos7.5
enabled=1
gpgcheck=0
EOF
l浏览器访问,就可以查看
ftp://172.168.2.2/centos7.5
8.镜像制作
获取镜像
docker pull centos:7
docker run -it --name='old_centos' centos:7
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
8.1基于容器制作镜像
8.11构建可道云网盘
安装PHP
yum install php-fpm -y
vi /etc/php-fpm.d/www.conf
user = nginx
group = nginx
#启动
php-fpm -D
#php-gd
#php-mbstring
#yum install php-mysql
配置Nginx
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx -y
vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
root /code;
index index.php index.html index.htm;
location ~ \.php$ {
root /code;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /code$fastcgi_script_name;
include fastcgi_params;
}
上传PHP代码
wget http://static.kodcloud.com/update/download/kodbox.1.13.zip
docker cp 柯道云 4ed573a2c3b:/code
配置ssh
yum install -y openssh-server
yum install initscripts -y
/usr/sbin/sshd-keygen
echo "123456"|passwd --stdin root
##查看命令需要的包
#yum provides unzip
#which unzip
#rpm -qf /usr/bin/unzip
容器内创建
#!bin/bash
#nginx -g 'daemon off;'
nginx
#php-fpm -F
php-fpm
/usr/sbin/sshd -D
创建镜像
docker commit sssss kod:v1
启动容器
docker run -d --name="zbb" -p 99:22 -p80:80 kod:v2 /bin/bash /init.sh
测试访问
ssh ip:99
浏览器访问ip:88
8.2基于文件创建镜像
FROM #指定基础镜像
MAINTAINER #指定维护者信息,可以没有
LABLE #描述,标签
RUN #执行
ADD #给它点创业资金(会自动解压tar) 制作docker基础的系统镜像
WORKDIR #cd(设置当前工作目录)
VOLUME #设置卷,挂载主机目录
EXPOSE #指定对外的端口(-P 随机端口)
CMD #结束的最后执行的命令
dockerfile其他指令:
COPY #复制文件(不会解压)
ENV #环境变量(更改SSH密码,mysql)
ENTRYPOINT #容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)
#centos-6.9sshd
#FROM centos:6.9
FROM 2199b8eb8390 #获取镜像
RUN yum install -y openssh* #执行命令
RUN /etc/init.d/sshd start && /etc/init.d/sshd start && echo '123' |passwd root --stdin
EXPOSE 22 #暴露端口
CMD ["/usr/sbin/sshd","-D"] #结束的最后执行的命令
根据镜像创建镜像
docker image build -t 'zbb/centos6.9-sshdv3' ./
创建容器
docker run -d 897a471638e5 /bin/bash
查看容器的ip
docker inspect c10335410d7c
连接测试
ssh 172.17.0.2
8.3制作基础镜像
FROM scratch
ADD centos-7.7-x86_64-docker.tar.xz /
LABEL org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20191024"
CMD ["/bin/bash"]
docker更改初始root密码
docker run -d --env "SSH_PASS=12321321" 897a471638e5 /bin/bash /init.sh
#!bin/bash
echo "$SSH_PASS"|passwd --stdin root
/usr/sbin/sshd
nginx -g 'daemon off;'
8.4根据dockerfile 创建LAMP
#centos-lnmp
FROM centos:6.9
#FROM 2199b8eb8390 #获取镜像
RUN yum install -y openssh* mysql mysql-server httpd php php-mysql
RUN /etc/init.d/sshd start && echo '123' |passwd root --stdin
#&& /etc/init.d/mysqld start && /etc/init.d/httpd start
#RUN mysql -e "grant all on *.* to root@'%' identified by '123';create database discuz charset utf8;"
COPY index.php /var/www/html
COPY init.sh /
# ADD bbs.tar.gz /var/www/html 会自动解压 还可以传url的文件
EXPOSE 22
EXPOSE 80
EXPOSE 3306 #暴露端口
CMD ["/bin/bash","/init.sh"] #结束的最后执行的命令
#VOLUME ['/var/www/html','/data/mysql/data'] 自动挂载卷
#WORKDIR 进入目录相当于cd
#ENV AA_DIR = '/var/www/html' 申明变量 ${AA_DIR}调用
#ENTRYPOINT 和CMD一样 但是不会被命令行的命令 替换掉
#USER 指定用户
vim index.php
<?php
phpinfo();
?>
vim init.sh
#!/bin/bash
echo '123' |passwd root --stdin
/etc/init.d/mysqld start
mysql -e "grant all on *.* to root@'%' identified by '123';create database discuz charset utf8;"
/etc/init.d/httpd start
/usr/sbin/sshd -D
构建镜像
docker build -t 'zbb:lnmp' -f Dockerfile
制作容器
docker run -d --name='zbb_lnmp' -p33:22 -p34:80 -p3306:3306 zbb/lnmp
测试 浏览器访问端口 服务器telnet 测试端口开放性
9.docker镜像的分层
复用,节省空间
镜像分层的好处:复用,节省磁盘空间,相同的内容只需加载一份到内存。 修改dockerfile之后,再次构建速度快
10.dockerfile 优化
1:尽可能选择体积小linux,alpine
2:尽可能合并RUN指令,清理无用的文件(yum缓存,源码包)
RUN yum nginx -y && yum clean all
3:修改dockerfile,把变化的内容尽可能放在dockerfile结尾
4: 使用.dockerignore,减少不必要的文件ADD . /html
11.容器之间的通讯
单方向通讯
docker run -it --link xxxx:test centos:7
--link 起别名
在/etc/host 加入了地址解析
ping test
---------
使用docker安装zabbix
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin
docker run --name zabbix-java-gateway -t \
-d zabbix/zabbix-java-gateway:latest
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--link mysql-server:mysql \
--link zabbix-java-gateway:zabbix-java-gateway \
-p 10051:10051 \
-d zabbix/zabbix-server-mysql:latest
docker run --name zabbix-web-nginx-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-p 80:80 \
-d zabbix/zabbix-web-nginx-mysql:latest
12.安装编排工具
单机版
yum -y install epel-release
yum install -y docker-compose
cd my_wordpress/
vi docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- web_data:/var/www/html
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
web_data:
#启动
docker-compose up
#后台启动
docker-compose up -d
13.私有仓库registry(没啥用)
搭建docker仓库
1.启动
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
--restart=always #每次重启doker 容器会自动重启也可以在配置文件中 配置
"live-restore":true
2.修改配置为文件
不改配置文件,默认找的是docker hub
vim /etc/docker/daemon.json
"insecure-registries": ["127.0.0.1:5000"]
3.重启docker
systemctl restart docker
4.上传镜像
docker tag nginx:1.14 127.0.0.1:5000/zbb/nginx:v1
docker push 127.0.0.1:5000/zbb/nginx
5.测试
删除源镜像,从本地上pull
docker image rm -f 295c7be07902
docker pull 127.0.0.1:5000/zbb/nginx:v1
6.本地仓库加安全认证
yum install httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd -Bbn zbb 123 > /opt/registry-auth/htpasswd
重启
docker rm -f `docker ps -aq`
docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
上传
docker tag centos:6.9 127.0.0.1:5000/zbb/centos:v1
docker login 127.0.0.1:5000
docker push 127.0.0.1:5000/zbb/centos:v1
14.企业仓库habor
安装docker-compose,harbor管理是通过docker-compose.yml文件进行管理的,因此在使用harbor之前必须先安装docker-compose组件。
1.下载harbor
wget https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz
3.上传到/opt下
tar -zxvf harbor-offline-installer-v2.1.0.tgz
4.修改harbor.cfg配置文件
vim harbor.yml
#修改如下几项
hostname = 你本机的IP
harbor_admin_password = admin账号的密码
5.编译
./install.sh
#停止harbor
docker-compose stop
docker-compose start
ip地址访问 测试
6.加入配置文件
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://u7vs31xg.mirror.aliyuncs.com"],
"insecure-registries": ["127.0.0.1"],
"live-restore": true
}
7.重启
systemctl restart docker.service
8.新建项目
9.项目推送拉取
docker login 127.0.0.1
docker tag centos:6.9 127.0.0.1/zbb/centos:v2
docker push 127.0.0.1/zbb/centos:v2
docker image rm -f 127.0.0.1/zbb/centos:v2
docker pull 127.0.0.1/zbb/centos:v2
10.安装https
./install.sh
15.Docker网络类型
1.查看支持网络类型
docker network ls
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
7e9072c9bb16 bridge bridge local
7921b218278b harbor_harbor bridge local
9643c2e650a2 host host local
efabf4ae7459 none null local
2.测试使用各类网络类型
none : 无网络模式
bridge : 默认模式,相当于KVM中的NAT
host : 公用宿主机Network NameSpace(不隔离网络资源)
container : 与其他容器公用Network Namespace(两个容器共用一个端口) k8s中使用
docker run -it --name="c_h13" --network=host centos:6.9
docker run -it --name="c_h14" --network=container:容器名 centos:6.9
docker network ls
3.Docker跨主机网络
4.macvlan
docker自带无需安装 2台服务器
docker network create -d macvlan --subnet=10.0.0.0/24 --gateway=10.0.0.1 -o parent=eth0 macvlan_1
#docker network rm macvlan_1 删除
#docker run -it --network macvlan_1 --ip=10.0.0.12 busybox #1
docker run -it --network macvlan_1 --ip=10.0.0.13 busybox #2
sudo docker rm $(docker ps -qf status=exited)
5.overlay
容器在两个跨主机进行通信的时候,是使用overlay network这个网络模式进行通信;如果使用host也可以实现跨主机进行通信,直接使用这个物理的ip地址就可以进行通信。overlay它会虚拟出一个网络比如10.0.2.3这个ip地址。在这个overlay网络模式里面,有一个类似于服务网关的地址,然后把这个包转发到物理服务器这个地址,最终通过路由和交换,到达另一个服务器的ip地址。
1.基本配置
两台服务器都配置
vim /etc/docker/deamon.json
{
"cluster-store": "consul://host_1的ip:8500",
"cluster-advertise": "host_ip:2376" #各自主机的ip
}
报错,都要改一下配置
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd
都重启
然后host1安装
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
-h容器的主机名
浏览器输入 ip:8500测试
2.创建overlay网络
host1
docker network create -d overlay zbb
docker run -it --network zbb --name zbb01 busybox:latest /bin/sh
host2
docker network ls #发现也有了
docker run -it --network zbb --name zbb02 busybox:latest /bin/sh
/ # ping zbb01 #通了
至此完成配置
dcoker network connect zbb zbb05
6.直接路由模式
没做过 网上一位大神写的很好 这是博客地址
https://www.jianshu.com/p/477a62165376
参考文档:docker中文
http://www.dockerinfo.net/document
参考书籍:Docker开发指南
https://www.zhuimengnan.com/docker.pdf
16.抓包分析
抓包演示
我们先想一下,我们要抓哪个网卡的包
-
首先访问宿主机的8088端口,我们抓一下宿主机的eth0
$ tcpdump -i eth0 port 8088 -w host.cap
-
然后最终包会流入容器内,那我们抓一下容器内的eth0网卡
# 容器内安装一下tcpdump $ sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories $ apk add tcpdump $ tcpdump -i eth0 port 80 -w container.cap
到另一台机器访问一下,
$ curl 172.21.32.6:8088/
停止抓包,拷贝容器内的包到宿主机
$ docker cp test:/root/container.cap /root/
把抓到的内容拷贝到本地,使用wireshark进行分析。
$ scp root@172.21.32.6:/root/*.cap /d/packages
(wireshark合并包进行分析)
17.调试分析
调试或者排查容器启动错误
## 若有时遇到容器启动失败的情况,可以先使用相同的镜像启动一个临时容器,先进入容器
$ docker exec -ti --rm <image_id> bash
## 进入容器后,手动执行该容器对应的ENTRYPOINT或者CMD命令,这样即使出错,容器也不会退出,因为bash作为1号进程,我们只要不退出容器,该容器就不会自动退出
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?