1.docker
Docker是一个开源的应用容器引擎;是一个轻量级容器技术;
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的
docker与虚拟机相比 docker使用的是宿主机的系统配置
而虚拟机使用的是独立的虚拟机配置
2.docker配置
Home - Dockerhttps://www.docker.com/或者去阿里云镜像站都可以下载
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
下载docker-ce yum源到/etc/yum.repo.d/目录下
编辑文件内容
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=0
下载extras updates 源到/etc/yum.repo.d/目录下
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
并编辑文件内容(去除不用的yum源地址)
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/updates/$basearch/
gpgcheck=0
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/extras/$basearch/
gpgcheck=0
下载centos镜像文件
yum install docker-ce -y
设置程序开机自启动
编辑文件/etc/sysctl.d/docker.conf
bridge-nf-call-iptables = 1
bridge-nf-call-ip6tables = 1
sysctl --system
安装完毕后即可使用
3. docker命令
docker images 查看已安装的dockers及版本
docker search nginx 查看nginx的docker版本
docker pull 拉取docker (是从外网下载容器)
docker run -d --name liang nginx 启动nginx容器镜像 并赋予名称liang
docker rm -f 容器id 收回镜像
docker rmi 容器id 删除容器
docker run -it --rm bash 容器名称
进入镜像交互界面
4.docker镜像内容存储
[root@redhat1 ~]# docker tag nginx:latest nginx:v1
[root@redhat1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 0e901e68141f 2 weeks ago 142MB
nginx v1 0e901e68141f 2 weeks ago 142MB
yakexi007/game2048 latest 19299002fdbe 5 years ago 55.5MB
容器时一个镜像文件 只许读不许写
root@cdb9175c5ecf:/# touch file1
root@cdb9175c5ecf:/# touch file2
root@cdb9175c5ecf:/# touch file3
root@cdb9175c5ecf:/# ls
bin dev docker-entrypoint.sh file1 file3 lib media opt root sbin sys usr
boot docker-entrypoint.d etc file2 home lib64 mnt proc run srv tmp var
root@cdb9175c5ecf:/#
exit
[root@redhat1 ~]# docker run -it --rm nginx bash
root@d9e08adaa510:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
如果要保存自己写入的数据 可以使用ctrl+p+q 将容器打入后台
执行此命令
[root@redhat1 ~]# docker run -it --rm nginx:latest bash
root@5d1d76213286:/# touch file{1..3}
root@5d1d76213286:/# ls
bin dev docker-entrypoint.sh file1 file3 lib media opt root sbin sys usr
boot docker-entrypoint.d etc file2 home lib64 mnt proc run srv tmp var
root@5d1d76213286:/# [root@redhat1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d1d76213286 nginx:latest "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp vigorous_hopper
使用此命令提交
[root@redhat1 ~]# docker attach vigorous_hopper
root@5d1d76213286:/# ls
bin dev docker-entrypoint.sh file1 file3 lib media opt root sbin sys usr
boot docker-entrypoint.d etc file2 home lib64 mnt proc run srv tmp var
然后退出镜像 打开之前打包的镜像 文件存在(但是这些文件都是存在本地上的,镜像仍然时只读的,只是在之前的镜像上多加了一层)
[root@redhat1 ~]# docker run -it --rm nginx:latest
root@bb5407922c55:/# ls
bin dev docker-entrypoint.sh file1 file3 lib media opt root sbin sys usr
boot docker-entrypoint.d etc file2 home lib64 mnt proc run srv tmp var
但是这种方式不会记录操作
要想使用记录操作的方式,需要建立一个目录 在目录中建立一个文件Dockerfile Dockerfile一定要在一个单独的子目录里
在文件中书写镜像中要做的事情
使用docker build -t nginx:latest . 命令来提交 生成的文件 动作都会记录下来
[root@redhat1 ~]# mkdir docker
[root@redhat1 ~]# cd docker/
[root@redhat1 docker]# vim Dockerfile
[root@redhat1 docker]# cat Dockerfile
FROM nginx
RUN mkdir /date
RUN touch /date/file1
[root@redhat1 docker]# docker build -t nginx:latest .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM nginx
---> 4bbedfe99d34
Step 2/3 : RUN mkdir /date
---> Running in 7c14289be2d4
Removing intermediate container 7c14289be2d4
---> 80dcbf9a9a23
Step 3/3 : RUN touch /date/file1
---> Running in ab5db1189351
Removing intermediate container ab5db1189351
---> 528c74c3e554
Successfully built 528c74c3e554
Successfully tagged nginx:latest
[root@redhat1 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 528c74c3e554 18 seconds ago 142MB
nginx v1 113ff14f6ff0 48 minutes ago 142MB
nginx <none> 0e901e68141f 2 weeks ago 142MB
yakexi007/game2048 latest 19299002fdbe 5 years ago 55.5MB
[root@redhat1 docker]# docker history nginx:latest
IMAGE CREATED CREATED BY SIZE COMMENT
528c74c3e554 2 minutes ago /bin/sh -c touch /date/file1 0B
80dcbf9a9a23 2 minutes ago /bin/sh -c mkdir /date 0B
5. 如何建立一个镜像
如建立一个nginx的镜像容器
则先在本地建立一个目录 在目录中建立文件Dockerfile 并放入自己下载的nginx源码包
在Dockerfile文件中写入nginx源码包的编辑及安装参数 格式如下
FROM centos:7
ADD nginx-1.21.6.tar.gz /mnt
WORKDIR /mnt/nginx-1.21.6
RUN yum install -y gcc
RUN yum install -y pcre-devel
RUN yum install -y openssl-devel
RUN yum install -y make
RUN ./configure --with-http_stub_status_module --with-http_ssl_module
RUN make
RUN make install
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
目录内文件
[root@server5 docker]# ls
Dockerfile nginx-1.21.6.tar.gz
编辑完成后在当前目录下使用此命令来编辑容器
[root@server5 docker]# docker build -t nginx:v1
使用docker images 可以查看容器
此方式层数较多 且没有优化因此容器较大
6.容器的压缩优化
若想使容器缩小
则在编辑文件Dockerfile时应该曲调不必要的层数 可以合并的尽量合并 删除不必要的安装包
在安装nginx时关闭gcc 安装完成后
如下所示
FROM centos:7 as build
ADD nginx-1.21.6.tar.gz /mnt
WORKDIR /mnt/nginx-1.21.6
RUN yum install -y gcc pcre-devel openssl-devel make && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_stub_status_module --with-http_ssl_module && make && make install && rm -fr /mnt/nginx-1.21.6 && yum remove -y gcc make && yum clean all
FROM centos:7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
安装完之后容器大小会大幅缩减