0x00 前言
本文介绍下日常工作的一些基础 Docker 使用
0x01 docker 镜像制作和镜像打包
问题
作为一个入门级用户,很有可能写出下面的 Dockerfile:
From centos:7
LABEL maintainer="panda<ringbuffer@126.com>"
ADD requirements.txt /
ADD xxxx.sh /
ADD xxxx-1.2.3.4.tar.gz / ## 自动解压
ADD xxxx-master.zip /
WORKDIR /
RUN export http_proxy=http://xxx.xx.com:8080 && \
export https_proxy=http://xxx.xx.com:8080 && \
yum install -y yum-utils && \
yum-config-manager --enable epel && \
yum -y install unzip zip && \
unzip xxxx-master.zip && \
mkdir -p /data/ && \
mkdir -p /data/log/&& \
yum install -y epel-release && \
yum install -y yum-utils && \
yum -y install python && \
yum -y install python-pip && \
pip install --upgrade pip && \
yum -y install python-devel mysql-devel && \
yum install gcc -y && \
pip install --upgrade pip && \
pip install -r requirements.txt && \
cd xxxx-1.2.3.4 && \
python setup.py install && \
unzip /xxxx-master.zip && \
cd /xxxx/ && \
python setup.py install && \
pip install cryptography &&\
export http_proxy= && \
export https_proxy= && \
unset http_proxy && \
unset https_proxy
CMD ["/bin/sh", "-c","cd /xxxx/bin/ && /usr/bin/python xxxxx.py"]
上面这个 Dockerfile 的问题在于,流程过于冗长,每次调用该 Dockerfile 生成镜像会耗费较长时间,那么如何优化呢?不考虑更换 From centos:7
的情况下,可以通过镜像制作的方式来解决,步骤如下:
制作 && 打包
docker pull centos:7 #拉取一个基础镜像
docker run -it --name=bfcentos centos:7 #创建一个交互式容器
docker cp xxx.tar bfcentos:/data/ #上传一些公共包到容器的 / data 目录
#在容器中安装软件
docker commit bfcentos bfcentos-python27 #将交互式的容器提交为一个新的镜像
通过 docker commit
将刚才部署好公共软件 / 包的容器提交为一个新的镜像,然后打上 tag 推送到公司的镜像仓库去:
[root@VM_120_245_centos /data/rootback/docker-python]# docker commit bfcentos bfcentos-python27
sha256:xxxxxxx
[root@VM_120_245_centos /data/rootback/docker-python]# docker tag bfcentos-python27:latest mirrors.xxxx.com/samp/bfcentos-python27:latest
[root@VM_120_245_centos /data/rootback/docker-python]# docker push mirrors.xxxx.com/samp/bfcentos-python27:latest
The push refers to repository [mirrors.xxxx.com/samp/bfcentos-python27]
f77c094d51c9: Pushing [=========> ] 73.25MB/404.9MB
174f56854903: Pushing [=================> ] 70.4MB/203.9MB
这样,下次可以直接使用 From mirrors.xxxx.com/samp/bfcentos-python27:latest
构建:
From mirrors.xxxx.com/samp/bfcentos-python27:latest
LABEL maintainer="panda<ringbuffer@126.com>"
ADD xxxx-master.zip /
WORKDIR /
RUN unzip /xxxx-master.zip
CMD ["/bin/sh", "-c","cd /xxxx/bin/ && /usr/bin/python xxxx.py"]
镜像 && 容器打包
docker save -o /root/xxxx.tar <name> #镜像打包
docker load -i /root/xxxx.tar #导入镜像
docker export -o /root/xxxx.tar <name> #容器打包
docker import xxxx.tar <name>:latest #导入容器
Docker 的代理配置
1、docker pull 代理
在执行 docker pull
指令时,是由守护进程 dockerd
来执行。 因此,代理需要配在 dockerd
的环境中。 此环境受 systemd
所管控,因此实际是 systemd
的配置,如下:
mkdir -p /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
需要重启 systemd
配置生效:
systemctl daemon-reload
systemctl restart docker
0x02 参考
FEATURED TAGS
Latex
gRPC
负载均衡
OpenSSH
Authentication
Consul
Etcd
Kubernetes
性能优化
Python
分布式锁
WebConsole
后台开发
Golang
OpenSource
Nginx
Vault
网络安全
Perl
分布式理论
Raft
正则表达式
Redis
分布式
限流
go-redis
微服务
反向代理
ReverseProxy
Cache
缓存
连接池
OpenTracing
GOMAXPROCS
GoMicro
微服务框架
日志
zap
Pool
Kratos
Hystrix
熔断
并发
Pipeline
证书
Prometheus
Metrics
PromQL
Breaker
定时器
Timer
Timeout
Kafka
Xorm
MySQL
Fasthttp
bytebufferpool
任务队列
队列
异步队列
GOIM
Pprof
errgroup
consistent-hash
Zinx
网络框架
设计模式
HTTP
Gateway
Queue
Docker
网关
Statefulset
NFS
Machinery
Teleport
Zero Trust
Oxy
存储
Confd
热更新
OAuth
SAML
OpenID
Openssl
AES
微服务网关
IM
KMS
安全
数据结构
hashtable
Sort
Asynq
基数树
Radix
Crontab
热重启
系统编程
sarama
Go-Zero
RDP
VNC
协程池
UDP
hashmap
网络编程
自适应技术
环形队列
Ring Buffer
Circular Buffer
InnoDB
timewheel
GroupCache
Jaeger
GOSSIP
CAP
Bash
websocket
事务
GC
TLS
singleflight
闭包
Helm
network
iptables
MITM
HTTPS
Tap
Tun
路由
wireguard
gvisor
Git
NAT
协议栈
Envoy
FRP
DPI
gopacket
Cgroup
Namespace
DNS
eBPF
GoZero
Gost
Clash
gopsutil
HIDS
ELKEID
XDP
TC
Linux