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
安装完毕后即可使用
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 nginx5. 如何建立一个镜像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
如建立一个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;"]
安装完之后容器大小会大幅缩减



