部署安装docker-ce社区版
1.安装阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2.安装依赖包和一些小工具
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
3.关闭防护墙
systemctl stop firewalld
systemctl disable firewalld
4.关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
##关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
5.uname -r 查看内核必须是3.1版本以上
6.修改内核参数,开启内核转发功能
cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward=1
EOF
重新加载配置
sysctl -p /etc/sysctl.d/docker.conf
报错
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
先执行modprobe br_netfilter
在重新加载内核配置
sysctl -p /etc/sysctl.d/docker.conf
7.安装Docker-CE社区版
下载docker-ce对应的源
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
重新加载yum缓存
yum clean all && yum makecache
安装docker-ce社区20版本
yum install docker-ce-20.10.6 -y
8.添加源加速器
mkdir -p /etc/docker
touch /etc/docker/daemon.json
vi /etc/docker/daemon.json
{
"registry-mirrors" : [
"https://8xpk5wnt.mirror.aliyuncs.com"
]
}
9.加载配置启动docker
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
10.查看是否安装完成
# docker version
显示:如下表示成功ץ
Client: Docker Engine - Community
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Built: Mon Dec 13 11:45:41 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.6
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 8728dd2
Built: Fri Apr 9 22:43:57 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
11.检查内核和是否安装了存储驱动
uname -r
ls -l /sys/class/misc/device-mapper/ 查看存储驱动
yum install device-mapper -y 安装存储驱动
modprobe dm-mod 加载存储驱动模块
12 时间同步
yum install ntpdate -y
ntpdate ntp.aliyun.com
13.docker容器的三大要素 :镜像 容器 仓库
docker镜像是不包含内核的就只是一个发型版本
docker镜像常用命令
镜像常用命令:
查找命令 docker search 镜像名/ID
下载命令:docker pull 镜像名/ID (docker /var/lib/docker中 通过docker info | grep "Docker Root Dir" 可以查看)
推送命令:docker push 镜像名/ID
删除镜像:docker rmi 镜像名/ID
删除所有镜像: docker rmi `docker images -aq`
本地导入镜像:(①docker load --input tomcat.tar #使用input导入 ②docker load < tomcat.tar #使用重定向导入)
导出到本地镜像:docker save -o 本地镜像名称(默认是tar) 镜像
改镜像名称:docker tag 镜像ID 名称
docker容器常用命令
容器常用命令:
生成创建一个容器:docker run -t -d -p 宿主机端口:容器端口 --name=起的容器名 镜像 (备注:8080是物理机端口)
容器多端口映射:docker run -t -d -p 8080:80 -p 443:443 --name=起的容器名 镜像
进入容器方法1:docekr exec -it 容器名/ID /bin/bash
进入容器方法2:docker attach 容器ID(生:产环境禁用)
启动容器:docker start 容器/ID
重启容器:docker restart 容器/ID
关闭容器:docker stop 容器/ID
查看所有容器:docker ps -a
查看运行中容器:docker ps (docker container ls)
删除容器:docker rm 容器名/ID (加 -f docker rm -f 容器名/ID 强制删除)
删除所有容器:docker rm `docker ps -aq`
退出容器:exit
查看容器进程信息:docker top 容器名/ID
容器CPU IO 内存等资源使用情况:docker stats 容器名/ID
查看容器详情:docker inspect 容器ID
查看容器日志:docker logs 容器名/ID
导出容器:docker export 容器名/ID > 容器名.tar
导入容器会变成镜像:docker import nginx02.tar test/nginx02:v1.0(docker images查看)
获取容器IP: docker inspect --format {{.NetworkSettings.IPAddress}} 容器/ID
docker run -d --name=容器名 --restart=always 镜像 bash (注释:--restart=always表示挂了就启动)
dockerfile
dockerfile是用于构建镜像
dockerfile指令:
FROM 指定基础镜像(例如:FROM centos \ FROM debian 等等)
MAINTAINER 指定作者信息(例如:MAINTAINER "duanqk" )
RUN 想干什么(例如: RUN yum install -y nginx )
ADD 拷贝宿主机文件到容器内,并自动解压 (例如:ADD index.html.tar.gz /var/www/html/index.html)
COPY 拷贝宿主机文件到容器内(例如:ADD index.html /var/www/html/index.html)
WORKDIR 就是cd命令(设置当期目录)
volume 设置卷,挂载主机目录的(volume /date 将容器内的/data文件夹。容器运行时该目录自动挂载,目录中写入数据操作,不会被容器记录为匿名挂载卷)
EXPOSE 指定对外端口 80(帮助使用该镜像的人理解对外提供服务的端口)
CMD 容器启动后干什么事 (例如 :CMD ["/bin/bash"])
cat /etc/os-release 等同 CMD ["cat","/etc/os-release"]
容器中启动程序都是在前台运行 CMD systemctl start nginx 是错误的
正确启动容器命令 CMD ["nginx","-g","daemon off;"]
ENTRYPOINT与CMD区别以及用法
1.作用和CMD一样,都是在指定容器启动程序以及参数
2.当指定了entrypoint后,CMD指令的语义就有了变化。而是把CMD的内容当做参数传递给entrypoint
ENTRYPOINT ["nginx","-g","daemon off;"]
ENV 设置环境变量的(例如:ENV name="dqk") 无论容器运行或者构建时,变量都可以用
ARG 设置环境变量 (镜像构建时可以用,容器运行时消失)
创建镜像:
docker build -t 'centos-httpd:v1' . (注意 .)
-t: 镜像的名字及标签,通常 name:tag 或者 name 格式
--no-cache不采用之前缓存构建
docker build -t --no-cache 'centos-httpd:v1' . (注意 .)
改下镜像名称:docker tag 镜像ID 名称
查看详情:docker inspect 容器ID
docker构建私人镜像仓库
一、搭建本地私有仓库
1.1 首先下载registry镜像
docker pull registry
1.2 在daemon.json文件中添加私有镜像仓库地址
vim /etc/ docker/daemon.json
{
"insecure-registries": ["192.168.224.131:5000"],
#添加,注意用逗号结尾
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
systemctl restart docker.service
1.3 运行registry容器
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
===================================================
-itd: 在容器中打开一个伪终端进行交互操作,并在后台运行
-v: 把宿主机的/data/registry目录绑定到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的
持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了
--restart=always: 这是重启的策略,在容器退出时总是重启容器
--name registry: 创建容器命名为registry
registry:latest:这个是刚才pull下来的镜像
====================================================
Docker容器的重启策略如下:
no:默认策略,在容器退出时不重启容器
on-failure: 在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3 :在容器非正常退出时重启容器,最多重启3次
always: 在容器退出时总是重启容器
unless-stopped: 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
1.4查看私有镜像仓库是否启动
docker ps
1.5 查看本地有哪些镜像,为镜像打标签
docker images
举例打标签:docker tag nginx:1.16 192.168.224.131:5000/nginx:1.16
1.6上传到私有仓库
docker images查看
推送到私有仓库
docker push 192.168.224.131:5000/nginx
1.7查看私有仓库镜像
curl http://192.168.224.131:5000/v2/_catalog
{"repositories":["busybox","exechealthz-amd64","kube-dnsmasq-amd64","kubedns-amd64","mysql","nginx","tomcat"]}
参考51cto的博客:https://blog.51cto.com/u_15127632/4330542