Docker 镜像管理
Docker官方仓库 https://hub.docker.com/
Docker 镜像加速配置
浏览器打开 http://cr.console.aliyun.com,注册或登录阿里云账号,点击容器镜像服务,点击左侧的镜像加速器,将会得到一个专属的加速地址,而且下面有使用配置说明
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://es5ynw9q.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker
Docker 镜像管理
Docker镜像是只读的,含有启动容器所需要的文件系统,因此镜像主要用于创建并启动 docker容器
Docker 镜像含里面是一层层文件系统,叫做 Union File System(Union FS 联合文件系统),联合文件系统可以将多个目录挂载到一起从而形成一整个虚拟文件系统
一个典型的 Linux 文件系统由 bootfs 和 rootfs 两部分组成,bootfs(boot file system) 主要包含 bootloader 和 kernel,rootfs (root file system) 包含的就是典型 Linux 系统中的 /dev, /proc,/bin,/etc 等标准目录和文件
docker镜像管理
#搜索镜像
docker search centos:7.2.1511 #搜索镜像,带指定版本号
docker search centos #不带版本号默认latest,即最新
#下载镜像
docker pull nginx #不带版本号默认latest,即最新
docker pull centos:centos7 #指定下载版本
#查看本地镜像
docker images
#查看通过镜像打开的容器
docker ps -a
#镜像导出
可以将镜像从本地导出问为一个压缩文件,然后复制到其他服务器进行导入使用
docker save centos:centos7 > /opt/docker-centos7.tar
#镜像导入
docker load < /opt/docker-centos7.tar
#镜像删除,-f强制删除
docker rmi centos:centos7
docker version #验证docker版本信息
docker info #查看docker信息
docker容器管理
#从镜像启动或创建容器
docker run -it nginx bash #创建容器并进入容器
docker run -it nginx ls -l /etc/hosts #传递运行命令
docker run -it -p 8001:80 nginx #端口映射,宿主机8001转到容器80
docker run -it -p 8001:80 --name ngixn_web nginx #自定义容器名称
docker run -it -p 8001:80 -d nginx #后台启动容器
docker run -it -p 8001:80 --rm nginx #容器退出后自动删除
#删除容器,-f 强制删除
docker rm e2c99c2f4772
#查看正在运行中的容器,-a 所有容器,-q 只看容器ID
docker ps
#查看 Nginx容器访问日志,-f 动态查看
docker logs 3a88fc793acd
#容器的启动和关闭
docker start f821d0cd5a99
docker stop f821d0cd5a99
docker stop `docker ps -a -q` #批量关闭正在运行的容器
docker kill `docker ps -a -q` #强制关闭正在运行的容器
#进入到正在运行的容器
docker exec -it 3a88fc793acd bash
#批量删除已退出的容器
docker rm -f `docker ps -aqf status=exited`
docker rm -f `docker ps -aq` #批量删除所有容器
#Dns服务,默认采用宿主机的dns地址
docker run -it --dns 223.6.6.6 centos:centos7 bash
Docker 镜像与制作
镜像里面是没有内核的,镜像在被启动为容器后将直接使用宿主机的内核,而镜像本身则只提供相应的 rootfs,即系统正常运行所必须的用户空间的文件系统,比如/dev/,/proc,/bin,/etc 等目录,而没有/boot目录
为什么没有内核?
由于容器启动和运行过程中是直接使用了宿主机的内核,所以没有直接调用物理硬件,所以也不会涉及到硬件驱动,因此也用不上内核和驱动,另外有内核的那是虚拟机
手动制作 yum版 Nginx 镜像
docker pull centos
docker run -it centos bash
rm -rf /etc/yum.repos.d/*
cd /etc/yum.repos.d/
curl -o epel.repo https://mirrors.aliyun.com/repo/Centos-8.repo
yum install nginx -y
yum install -y vim wget pcre pcre-devel zlib \
zlib-devel openssl openssl-devel iproute net-tools iotop
vim /etc/nginx/nginx.conf
pid /run/nginx.pid;
daemon off; #关闭后台运行
echo docker-nginx-image > /usr/share/nginx/html/index.html
docker commit -a "813222818@qq.com" -m "Nginx yum" --change "EXPOSE 80 443" 3b80936aa9b9 centos8-yum-nginx #创建镜像
docker commit -a "813222818@qq.com" -m "Nginx yum" --change "EXPOSE 80 443" 3b80936aa9b9 centos8-yum-nginx:v2 #创建镜像带 Tag号
docker run -it centos8-yum-nginx:v2 bash #从自己镜像启动容器
docker run -it -p 8001:80 centos8-yum-nginx:v2 nginx #启动Nginx 80端口映射
curl http://10.0.0.3:8001/
docker-nginx-image
Dockerfile 制作编译版Nginx镜像
DockerFile 可以说是一种可以被 Docker 程序解释的脚本,DockerFile 是由一条条的命令组成的,其有自己的书写方式和支持的命令,Docker 程序读取 DockerFile 并根据指令生成 Docker镜像,Docker程序读取 DockerFile 并根据指令生成 Docker镜像,相比手动制作镜像的方式,DockerFile 更能直观的展示镜像是怎么产生的
#文件格式:
FROM centos:centos7 #定义基础镜像
MAINTAINER shishengyun #定义镜像者维护信息
RUN useradd nginx #执行的命令
ADD nginx.tar /opt/nginx #自动解压本地压缩包到镜像中
EXPOSE 80 443 #向外开放的端口
CMD ["nginx","-g","daemon off;"] #默认执行命令
docker pull centos
mkdir /opt/dockerfile/{nginx,tomcat,jdk,apache}/{centos,ubuntu,redhat} -pv
tree /opt/dockerfile/
ll /opt/dockerfile/nginx/ #准备源码与配置文件
-rw-r--r-- 1 root root 1032630 Mar 26 20:15 nginx-1.16.1.tar.gz
-rw-r--r-- 1 root root 2483 May 13 14:55 nginx.conf
cat /opt/dockerfile/nginx/nginx.conf
location / {
root /opt/nginx/html/;
index index.html index.php;
}
vim /opt/dockerfile/nginx/Dockerfile
#Nginx make install
FROM centos
MAINTAINER shishengyun 813222818@qq.com
RUN yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
RUN yum install -y vim lrzsz tree psmisc lsof tcpdump wget gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop zip unzip zlib-devel bash-completion automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed make iproute
RUN useradd nginx -s /sbin/nologin
ADD nginx-1.16.1.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/opt/nginx --with-http_sub_module && make && make install
ADD nginx.conf /opt/nginx/conf/nginx.conf
RUN ln -sv /opt/nginx/sbin/nginx /usr/sbin/nginx && chown -R nginx.nginx /opt/nginx/
RUN echo "make nginx" > /opt/nginx/html/index.html
EXPOSE 80 443
CMD ["nginx","-g","daemon off;"]
pwd
/opt/dockerfile/nginx
docker build -t nginx-make:v1 /opt/dockerfile/nginx/ #构建镜像
docker images #此时镜像创建完成
docker run -it -p 8001:80 nginx-make:v1 #通过镜像创建容器开启服务
curl 10.0.0.3:8001
make nginx
#删除none镜像
docker rmi -f `docker images |grep '<none>'| awk '{print $3}'