Docker三大核心:镜像、容器、仓库
Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中。可以理解为一个软件一个容器,这个容器不依赖本地的环境,而Docker相当于管理这些容器的一个平台或软件。
如果有旧版Docker需移除
sudo yum remove docker \
> docker-client \
> docker-client-latest \
> docker-common \
> docker-latest \
> docker-latest-logrotate \
> docker-logrotate \
> docker-engine
安装yum-utils包并设置稳定存储库
yum install -y yum-utils
Yum安装Docker
# 一般都有docker-ce的包
yum -y install docker-ce docker-ce-cli containerd.io
如果报错提示No package docker-ce available就看下面这篇文章
Docker基础命令
启动
systemctl start docker
守护进程重启
sudo systemctl daemon-reload
重启docker服务
systemctl restart docker
重启docker服务
sudo service docker restart
关闭docker
service docker stop
关闭docker
systemctl stop docker
Docker命令
# 查看正在运行的容器
docker ps
# 查看所有容器,包含被停止的
docker ps -a
# 查看本地仓库的镜像
docker images
# 启动容器,-p *:*为需要映射的端口,后面接images名称
docker run -d -p *:* *
-v *:* #映射容器内的目录至本地目录
# 在启动容器时候加入--restart 参数自动启动容器
docker run --restart always
no 不自动重启容器. (默认值)
on-failure 容器发生error而退出(容器退出状态不为0)重启容器,可以指定重启的最大次数,如:on-failure:10
unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器,手动stop的不算
# 进入正在运行的容器,后面容器ID
docker exec -it ID /bin/bash
# 进入正在运行的容器后拷贝容器内文件 容器ID:镜像路径 本地路径
docker cp *:/home /home/test
# 将本地文件拷贝至容器内 本地路径 容器ID:镜像路径
docker cp /home/test *:/home
# 备份正在运行的容器,后面接备份名称
docker commit -p ID *
# 拷贝images里的镜像至本地,前面是镜像ID,后面是cp后的名字
docker save * > *
# 恢复备份至本地的镜像,后面接镜像地址
docker load < *
# 给正在运行的容器更新重启配置,--restart搭配后面的参数使用
docker update --restart no *
Dockerfile:docker自定义镜像时需要用到的一个配置文件,用户自己创建,该文件所在目录无所谓。 文件头部一般是FROM 后面紧跟着的是镜像所调用的系统,或者说是封装的系统。 大致意思是Dockerfile相当于一个系统在封装时所需要的必要的文件,里面包含了你所需要用到的命令。
搭建Squid案例
# 安装Docker是必要的
yum -y install docker
# 因为Squid只能在centos上运行,所以我们调用Centos7作为系统。
docker pull centos:7
# 创建Dockerfile
vim Dockerfile
# 填写以下内容
# FROM 引用系统、COPY将Dockerfile文件当前目录的start.sh脚本复制到镜像的根目录、RUN 表示运行的命令、EXPOSE 表示要映射的端口、CMD表示将要运行的命令,CMD参数只能有一条。
FROM centos:7
COPY ./start.sh /start.sh
RUN yum -y install squid httpd-tools && \
yum clean all && \
rm -rf /etc/squid && \
rm -rf /home/*
EXPOSE 8889
CMD ["sh","/start.sh"]
------------------------------------------------------------------------------
# 封装系统,-t 后面接的是name,.代表当面目录
docker build -t Squid:v1 .
# start.sh,因为docker镜像必须要有一个守护进程,用了一个脚本文件做到一个每隔180秒输出 "squid is runing...",ps -ef|grep squid检测到没有squid的进程则 /usr/sbin/squid重启服务。
#/bin/bash
squid -z
/usr/sbin/squid
while true;do
count=`ps -ef|grep squid|grep -v grep`
if [ "$?" != "0" ];then
echo "no squid,run it"
/usr/sbin/squid
else
echo "squid is runing..."
fi
sleep 180
done
评论