Docker 安装及命令详解

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]

配置加速

源码安装

下载路径: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
上一篇:大数据开发之必须学会的资源调度平台YARN


下一篇:Docker自学笔记,未完