docker 安装
内核优化
sudo tee /etc/sysctl.conf <<-'EOF'
# 原文:闫世成的博客园 https://www.cnblogs.com/yanshicheng/
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
kernel.pid_max=4194303
vm.max_map_count=262144
fs.file-max=1048576
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 1
#net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.netfilter.nf_conntrack_max=2097152
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_mem = 786432 2097152 3145728
#kernel.pty.max = 4
EOF
资源限制调优
文件路径:/etc/security/limits.conf
sudo tee /etc/security/limits.conf <<-'EOF'
# 原文:闫世成的博客园 https://www.cnblogs.com/yanshicheng/
root soft nofile 1048576
root hard nofile 1048576
root soft nproc 1048576
root hard nproc 1048576
root soft stack 10240
root hard stack 32768
root soft memlock unlimited
root hard memlock unlimited
root soft core unlimited
root hard core unlimited
root soft msgqueue 8192000
root hard msgqueue 8192000
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 1048576
* hard nproc 1048576
* soft stack 10240
* hard stack 32768
* soft memlock unlimited
* hard memlock unlimited
* soft core unlimited
* hard core unlimited
* soft msgqueue 8192000
* hard msgqueue 8192000
EOF
关闭 swap 分区
root@ops103:~# sed -i 's@\(.*swap.*\)@#\1@g' /etc/fstab
root@ops103:~# sudo swapoff -a
root@ops103:~# free -h
total used free shared buff/cache available
Mem: 975Mi 181Mi 128Mi 1.0Mi 665Mi 705Mi
Swap: 0B 0B 0B
在线安装
阿里云源:https://developer.aliyun.com/mirror/docker-ce
乌班图安装示例
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
配置加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://v16stybc.mirror.aliyuncs.com"
],
"insecure-registries": [
"harbor.superops.cc"
],
"experimental": false,
"debug": false,
"features": {
"buildkit": true
},
"exec-opts": ["native.cgroupdriver=systemd"],
"max-concurrent-downloads": 20,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"data-root": "/data/docker",
"builder": {
"gc": {
"enabled": true,
"defaultKeepStorage": "20GB"
}
}
}
EOF
源码安装
下载路径:https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/
1. 解压
2. 拷贝文件到 /usr/bin/
3. 准备 containerd.service 文件至 /lib/systemd/system/containerd.service 可在在线安装拷贝相同版本文件
4. 准备 docker.service 文件至 /lib/systemd/system/docker.service 可在在线安装拷贝相同版本文件
5. 准备 docker.socket 文件至 /lib/systemd/system/docker.socket 可在在线安装拷贝相同版本文件
启动
root@ops104:~# systemctl enable --now docker
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
root@ops104:~#
root@ops104:~# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-12-29 15:05:30 UTC; 13min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 30861 (dockerd)
Tasks: 7
Memory: 37.6M
CGroup: /system.slice/docker.service
└─30861 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
docker警告WARING:No swap limit support 处理
编辑文件:/etc/default/grub
GRUB_CMDLINE_LINUX=配置项,原有的内容切记不要删除,在双引号内添加cgroup_enable=memory swapaccount=1,与原来的内容之间用空格分隔。或者执行下面sed命令
sed -i 's@\(^GRUB_CMDLINE_LINUX=.*\)"$@\1 cgroup_enable=memory swapaccount=1"@g' /etc/default/grub
# 更新grub
sudo update-grub
# 重启
reboot
# docker info 检查
docker info
······
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
http://hub-mirror.c.163.com/
Live Restore Enabled: false
docker 命令讲解
镜像相关
# 下载镜像
docker pull nginx
# 上传镜像
docker push xx/nginx
# 搜索镜像
docker search nginx
# 查看镜像
docker image ls
# 删除镜像
docker image rm 镜像ID
# 导出镜像
docker save ngixn:latest -o nginx_latest.tar.gz
# 指定导入名称
docker import nginx_latest.tar.gz superops.cc/nginx:v4
# 导入镜像
docker load -i nginx_latest.tar.gz
# 镜像打标签
docker tag ngixn:latest harbor.superops.cc/ngixn:latest
# 查看指定镜像的创建历史
docker image history harbor.superops.cc/ngixn:latest
# 获取镜像元数据信息
docker image inspect nginx
# 清理镜像
docker image prune
运行容器相关
参数
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- --name="nginx-lb": 为容器指定一个名称;
- --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h "mars": 指定容器的hostname;
- -e username="ritchie": 设置环境变量;
- --env-file=[]: 从指定文件读入环境变量;
- --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
- -m :设置容器使用内存最大值;
- --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- --link=[]: 添加链接到另一个容器;
- --expose=[]: 开放一个端口或一组端口;
- --volume , -v: 绑定一个卷
- --restart, 指定重启策略,
- no,默认策略,在容器退出时不重启容器
- on-failure,在容器非正常退出时(退出状态非0),才会重启容器
- on-failure:3,在容器非正常退出时重启容器,最多重启3次
- always,在容器退出时总是重启容器
- unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
# 运行 Mysql 示例
docker run -d --restart=always -p 3306:3306 --name mysql -v ~/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
进入容器
地址:https://www.cnblogs.com/yanshicheng/p/9452545.html
容器的其他操作
# 创建容器但不运行
docke container create ....
# 进入容器
docker container attach 容器ID
docker container exec -it 容器ID
# 将容器提交为镜像
docker container commit -a "yanshicheng xx@vv.com" -m "日志信息" -p 容器ID harbor.superops.cc/ngixn:v0.1
# 文件拷贝 容器 -> 宿主机
docker container cp 容器ID:/etc/nginx/nginx.conf /opt/
# 文件拷贝 宿主机 -> 容器
docker container cp /opt/nginx.conf 容器ID:/etc/nginx/nginx.conf
# 查看容器和镜像有哪些变化
docker diff 容器ID
# 查看事件
docker events
# 容器暂停
docker container pause 容器ID
# 取消暂停
docker container unpause 容器ID
# 停止
docker container stop 容器ID
# 启动
docker container start 容器ID
# 重启容器
docker container restart 容器ID
# 查看映射端口
docker container port 容器ID
# 查看容器
docker ps
docker ps -aq
docker ps -aq status=exited
docker rm -fv `docker ps -aq status=exited`
# 查看 容器状态
docker container top 容器ID
# 动态查看容器资源消耗情况
docker container stats 容器ID
# 命令可以用于阻塞一个或多个 Docker容器 直到容器停止,然后打印退出代码。
docker container wait 容器ID
# 查看容器日志
docker container logs -f 容器ID
# 保存容器为 tar 文件
docker container export -o mysql-`date +%Y%m%d`.tar 2a78c64dd80
# 获取容器元数据
docker container inspect 容器ID