Docker(容器):安装/分层/docker file/镜像

1.安装

1.1安装repo源

cd /etc/yum.repos.d/
vim docker.repo

[docker]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0

下载centos7的repo源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

替换为centos的源
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

vim CentOS-Base.repo

:%s/$releasever/7/g 		#替换

1.2安装docker

yum install docker-ce -y		#安装docker-ce
systemctl enable docker --now

docker info可以查看当前容器信息
在这里插入图片描述

调整网络映射:
sysctl -a |grep bridge-nf-call-iptables

net.bridge.bridge-nf-call-iptables = 0
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.docker0.stable_secret"
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"

cd /etc/sysctl.d
vim docker.conf

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

sysctl --system查看更改已生效
在这里插入图片描述

创建完成后会成一个docker0的桥接接口,本机所有容器都会桥接到该网卡上,地址为172.12.0.1/16,且本机虚拟机能上网,则容器也可以上网。
在这里插入图片描述

1.3 测试

查看:docker search yakexi007
加载到本地:docker pull yakexi007/game2048
列出本机项目:docker images
查看正在运行的容器:docker ps
搜索:docker search ***:官方镜像前面不带名字
更改镜像名称:docker tag yakexi007/game2048:latest game2048:latest
删除镜像:docker rmi yakexi007/game2048
查看docker层数:docker history busybox:latest
查看正在运行的docker:docker ps -a
开始:docker start ID
停止:docker stop ID
进入容器:docker container attach nice_haibt/ID
退出容器后保持容器开启:1.启动容器;2.进入容器;3.<ctrl>+<p>+<q>

在这里插入图片描述

2.镜像的分层结构

一个完整的docker镜像可以支撑一个docker容器的运行,在 Docker容器运行过程中主要提供文件系统视角。例如一个ubuntu:14.04的镜像,提供了一个基本的ubuntu:14.04的发行版,当然此 镜像是不包含操作系统Linux内核的。

  • 共享主机的kernel
  • base镜像提供的是最小的linux发行版
  • 同一docker主机支持运行多种linux发行版
  • 采用分层结构的最大好处时共享资源
    在这里插入图片描述
    docker封装的是文件系统

2.1 镜像的分层结构

在这里插入图片描述

2.2 镜像的构建

在这里插入图片描述

运行镜像:docker run -it --name demo demo:v1
注:容器(container)是运行在镜像(images)之上的,一般删除镜像前需要先停止在其上运行的容器,相关的操作有:
查看所有镜像:docker images
查看所有正在运行的容器:docker ps
查看所有已退出的容器:docker ps -a
删除镜像:docker rmi 镜像ID
删除容器:docker rm容器ID

1.docker commit
在修改容器后,退出保存时:

docker commit [options] container [repository[:tag]],
Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

例如:docker commit -m "add files" demo demo:v1

2.docker build(有审计,内部每一步都由docker commit生成)

mkdir docker
cd docker/
vim Dockerfile

FROM busybox
RUN touch file1
RUN mkdir westos

docker build -t demo1:v1 .
在这里插入图片描述

3.docker file详解

3.1 常用命令

在这里插入图片描述

cat Dockerfile 
FROM busybox
RUN touch file1
COPY index.html /
docker build -t demo:v1 .
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM busybox
 ---> b97242f89c8a
Step 2/3 : RUN touch file1
 ---> Using cache
 ---> 1caaf0bd69fe
Step 3/3 : COPY index.html /
 ---> c624f337bf49
Successfully built c624f337bf49
Successfully tagged demo:v1
docker run -it --rm demo:v1
/ # ls
bin         etc         home        proc        sys         usr
dev         file1       index.html  root        tmp         var

在这里插入图片描述
add可实现容器内解压
tar zcf test.tar.gz /etc

vim Dockerfile

FROM busybox
RUN touch file1
COPY index.html /
ADD test.tar.gz /mnt

docker build -t demo:v2 .

在这里插入图片描述
ENV:

vim Dockerfile

FROM busybox
RUN touch file1
COPY index.html /
ADD test.tar.gz /mnt
ENV HOSTNAME server4

在这里插入图片描述
在这里插入图片描述
下载nginx.tar
载入docker:docker load -i nginx.tar

vim Dockerfile

FROM busybox
RUN touch file1
COPY index.html /
ADD test.tar.gz /mnt
ENV HOSTNAME server4
EXPOSE 80

为本机随便指定一个接口:dcoker run -d --name demo -P nginx
容器在运行时的内存和宿主机是相同的,用free -m查看时,容器和宿主机(虚拟机)内存占用相同。
查看docker volume:docker volume ls
在这里插入图片描述

vim Dockerfile

FROM busybox
RUN touch file1
COPY index.html /
ADD test.tar.gz /mnt
ENV HOSTNAME server4
EXPOSE 80
VOLUME ["/data"]
CMD echo "hello world"

docker build -t demo:v6 .

docker run --rm demo:v6

hello world

此处也可以使用变量:

vim Dockerfile

FROM busybox
RUN touch file1
COPY index.html /
ADD test.tar.gz /mnt
ENV HOSTNAME server4
EXPOSE 80
VOLUME ["/data"]
CMD echo "hello $HOSTNAME"
docker run --rm demo:v7
hello server4

在这里插入图片描述
在这里插入图片描述

最后,通过脚本删除demo:v*
docker rmi `docker images |grep demo |awk '{print $1":"$2}'

3.2 设置阿里云镜像加速器

需要自己注册阿里云账户,然后按照提示在指定位置写入自己的加速文件,然后reload,restart
在这里插入图片描述

3.3 对rhel7精简版进行编译升级

docker load -i rhel7.tar
在这里插入图片描述
由于该版本不带bash,所以每次运行时需要附带bash
docker run -it --name demo rhel7 bash
在docker文件夹下准备dvd.repo,nginx-1.18.0.tar.gz

vim Dockerfile

FROM rhel7 
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.18.0.tar.gz /mnt
WORKDIR /mnt/nginx-1.18.0
RUN rpmdb --rebuilddb
RUN yum install -y gcc make pcre-devel zlib-devel
RUN ./configure
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

webserver:v1编译完成
在这里插入图片描述
运行该镜像:docker run -d --name webserver webserver:v1
查看该镜像编译历史:docker history webserver:v1
查看容器的具体信息:docker impacket webserver
在这里插入图片描述
在这里插入图片描述
得到容器的地址为172.17.0.2
在server1中进入该docke挂载的卷宗:
cd /var/lib/docker/volumes/e72f7ca5cda852e8f584248a4c21070ec8a1a50d4fa303ba64eee503fa98fd69/_data
为容器设置一个访问首页:echo www.lee.org > test.html
解析:

curl 172.17.0.2/test.html
www.lee.org

优化镜像思路:

  • 选择最精简的基础镜像
  • 减少镜像的层数
  • 清理镜像构建的中间产物
  • 注意优化网络请求
  • 尽量去用构建缓存
  • 使用多阶段构建镜像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值