安装Docker及学习

Docker安装及学习

1.环境介绍

OS:CentOS Linux release 8.5.2111

DNF是Dandified YUM的缩写,是一个面向基于RPM的Linux发行版的软件包管理器。

  • DNF用于在Fedora/RHEL/CentOS操作系统中安装、更新和删除软件包;

  • DNF是YUM的下一代版本,旨在取代YUM,它是 Fedora 22、CentOS8和RHEL8的默认软件包管理器;

  • DNF功能强大,DNF使维护包组变得很容易,并且能够自动解决依赖性问题。

2.关闭防火墙

systemctl stop firewalld && systemctl disable firewalld
systemctl stop iptables && systemctl disable iptables

3.关闭swap

# 临时关闭swap
swapoff -a
# 永久关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab

free -m命令查看swap状态

若swap行都显示 0 则表示关闭成功

4.禁用SELuinux

# 临时禁用SELuinux
setenforce 0
# 永久禁用SELuinux
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

sestatus -v命令查看SELuinux状态,若显示为disabled,则代表已经禁用。

5.卸载旧版本

卸载docker:

dnf remove -y docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine

若是CentOS7系统,dnf命令改为yum

CentOS8默认安装有podman等组件,它与containerd安装发生冲突,需要卸载,若是CentOS7可略过

dnf erase podman buildah -y

6.安装依赖包

dnf install -y yum-utils device-mapper-persistent-data lvm2

7.安装Docker

加载docker yum源:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看可安装版本:

yum list docker-ce --showduplicates

安装官方最新ce版本:

dnf install -y docker-ce docker-ce-cli containerd.io

或者安装指定版本:

dnf install -y docker-ce-23.0.0 docker-ce-cli-23.0.0 containerd.io

更新mkfs.xfs

dnf update xfsprogs

加入服务启动项,启动docker:

systemctl enable docker && systemctl start docker

8.安装docker compose

安装docker compose依赖包:

dnf install -y alpine py-pip python-dev libffi-dev openssl-dev gcc libc-dev make

升级依赖包,遇到过curl命令报错情况

yum update -y nss curl libcur

docker compose安装:

也可参照https://docs.docker.com/compose

curl -L "https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

若github拉不下来,换个镜像地址

curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.15.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

docker compose执行文件授权:

chmod +x /usr/local/bin/docker-compose

9.配置私服

先保存有/etc/docker目录

mkdir -p /etc/docker

编辑/etc/docker/daemon.json文件,在daemon.json文件内添加私服地址

{
  "insecure-registries": [
    "docker.nexus.io",
    "harbor.host.com"
  ],
  "registry-mirrors": [
    "http://docker.nexus.io",
    "http://harbor.host.com"
  ]
}

重启docker服务

systemctl restart docker

10.登录Docker私服

nexus私服登录:

docker login -u 你docker私服账号 -p 你docker私服账号的密码 docker.xxx.io

harbor私服登录:

echo "你的harbor账号的密码" | docker login --username 你的harbor账号 --password-stdin https://harbor.xxx.com.cn

11.Docker常用命令

查看状态

docker stats

查看版本

docker version

查看正在运行容器:

docker ps

查看所有容器,包括已经stop的容器

docker ps -a

查看容器参数:

docker inspect {{container-name}}

镜像相关命令:

查询所有镜像

docker images

镜像下载,不指定tag,则默认下载latest

# 下载最新mysql镜像,等同于  docker image pull mysql:latest
docker image pull mysql

镜像指定tag版本下载

docker image pull mysql:5.6

镜像删除

docker image rm mysql:5.6

镜像创建Tag,一般在push或持续集成的时候用到

docker tag mysql:5.6 mysql:v5.6

导入导出命令:

导出正在运行容器
export命令是从容器(container)中导出tar文件

docker export devops_jenkins_1 -o jenkins_latest.tar.gz

save命令则是从镜像(images)中导出tar文件

docker save -o jenkins_latest.tar.gz jenkins:latest

备份文件导入成镜像
load命令加载本地磁盘文件

docker import jenkins_latest.gz jenkins

创建docker network

docker network create devops

基于镜像启动容器

docker run -t -i jenkins /bin/bash

或者

docker run -d --name=jenkins -p 8080:80 jenkins:latest

查看容器实时滚动日志,且从最近100行开始查看:

docker logs -f -t --tail 100 {{container-name}}

进入容器:

docker exec -it {{container-name}} bash

从容器里面拷文件到的宿机

docker cp {容器名称}:{容器中文件的具体路径} {宿机存放目录}

从宿机拷文件到容器:

docker cp {宿机文件} {容器名称}:{容器中文件的存放目录}

docker system prune 自动清理

docker system prune --all

该指令默认会清除所有如下资源:

  • 已停止的容器(container)
  • 未被任何容器所使用的卷(volume)
  • 未被任何容器所关联的网络(network)
  • 所有悬空镜像(image)

清除Tag为“”的镜像:

docker rmi $(docker images -f "dangling=true" -q)

镜像排序查看:

docker images | sort -k7 -h

结合Linux定时任务清理:
crontab -e 添加如下:
每天凌晨1点执行

0 1 * * * docker rmi $(docker images -f "dangling=true" -q)

或者

0 1 * * * docker system prune -a -f

crontab -u //设定某个用户的cron服务
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务
crontab -i //打印提示,输入yes等确认信息
基本格式
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr …
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
定时任务的每段为:分,时,日,月,周,用户,命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
:表示任意时间都,实际上就是“每”的意思。可以代表00-23小时或者00-12每月或者00-59分
-:表示区间,是一个范围,00 17-19 * * * cmd,就是每天17,18,19点的整点执行命令
,:是分割时段,30 3,19,21 * * * cmd,就是每天凌晨3和晚上19,21点的半点时刻执行命令
/n:表示分割,可以看成除法,
/5 * * * * cmd,每隔五分钟执行一次

另一个方案,保留近5个Tag镜像:

cat << \EOF > clean_docker_images.sh
#!/usr/bin/env bash
#Author: 原件
#Data: 2020/12/30
#Description: 清理无标签的镜像,保留每个镜像最新的5个tag。

docker system prune -f

docker images | awk '{print $1}' | awk '{a[$1]++} END {for(i in a) if(a[i]>5) print(i"-"a[i])}' > /tmp/image-clear

for s in `cat /tmp/image-clear`;do

docker images | awk '$1=="'${s%-*}'"{print $0}' | tac | sed -n 1,`expr ${s##*-} - 5`p | awk '{print $3}' | uniq > /tmp/image-id

docker rmi -f `cat /tmp/image-id`

done

echo "****************"
echo "clear successful"
echo "****************"
EOF

chmod +x clean_docker_images.sh

12.引用 Reference

Kubernetes 1.25.4版本安装
kubeasz安装kubernetes1.25.5
CentOS8搭建nfs服务
k8s一键安装redis单机版
k8s一键安装mysql8单机版
Docker制作springboot运行应用镜像
k8s部署springboot应用
zookeeper集群安装
Nginx日志切割
Elasticsearch单机版本安装
Elasticsearch集群安装
springboot集成prometheus+grafana
安装Docker及学习
RabbitMQ集群安装

你可能感兴趣的:(docker,docker,linux)