docker容器

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;"]

安装完之后容器大小会大幅缩减

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值