Docker技术相关学习二

一、Docker简介

1.Docker之父Solomon Hykes形容docker就像传统的货运集装箱。

2.docker的特点和优势:

轻量级虚拟化:Docker容器相较于传统的虚拟机更加的轻量和高效,能够快速的启动和停止来节省系统资源。

一致性:确保应用程序在不同的环境中具有一致的运行表现

可移植性:可以轻松的将docker从一个平台迁移到另一个平台,无需考虑依赖和环境配置的差异

最高的资源利用:多个docker可以共享主机的操作系统内核从而可以更有效的利用系统资源。

易于部署和扩展:能够快速部署新的应用实例,也可以轻松的进行水平扩展

3.docker在企业中的应用场景:

4.docker的优势:

对于开发人员:build once and run anywhere

对于运维人员:configure once and run anything

二、部署docker

1.容器工作方法:

2.安装docker-ce并启动服务:

yum install docker-ce -y

编辑docker 启动文件,设定其使用iptables的网络设定方式,默认使用nftables

bash 复制代码
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
--iptables=true

启动docker:systemctl enable docker --now

在rhel7中需要修改以下配置信息,其目的是将桥接网口的流量交给iptables处理,使用iptables的规则进行流量过滤以及启用网络数据的转发功能,即可以将一个网口的数据包转发到另外一个接口上

bash 复制代码
vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1

三、Docker的基本操作

1.dcoker 镜像管理:

搜索镜像:docker search nginx

拉取镜像:docker pull busybox

查看本地镜像:docker iamges

查看镜像信息:docker image inspect nginx:1.26

保存镜像:docker image save nginx:latest -o nginx-latest.tar.gz

删除镜像:docker rmi nginx:latest

2.容器的常用操作:

启动容器:docker run -d --name mario -p 80:8080 xiao/mario

docker run -it --name centos7 centos:7

进入容器中,按ctrl+d退出并停止容器,按ctrl+pq退出但不停止容器,其中-d参数表示容器在后台运行当前终端会立即返回且容器的输出不会显示在终端,宿主机的80端口会映射到容器的8080端口,可以通过浏览器访问 http://localhost来访问,会将该请求转发到容器内的web应用。其中 -i参数表示以交互模式运行容器(使容器的标准输入保持打开状态),-t参数表示为其分配一个伪终端,即可以在容器内使用命令行工具。

重新进入容器:docker attach centos7

在容器中执行命令:docker exec -it test ifconfig

查看当前运行容器:docker ps

查看所有容器:docker ps -a

查看容器运行的详细信息:docker inspect busybox

停止容器:docker stop busybox

杀死容器:docker kill busybox

开始停止的容器:docker start busybox

容器内的第一个进程必须一直处于运行状态否则这个容器会处于退出状态

删除停止的容器:docker rm centos7

删除运行的容器:docker rm -f busybox

删除所有停止的容器:docker container prue -f

3.容器内提交:

bash 复制代码
docker run -it --name  test busybox
touch testfile
#删除容器
docker rm test
#删除容器后开启新的容器文件
docker run -it --name test busybox

通过上述示例可以看到容器内刚开始创建的文件已经不存在,当需要在再次打开容器时仍然可以看到之前创建过的文件,可以执行容器内内容提交的命令来永久保存

bash 复制代码
#容器内内容提交命令
docker commit -m "add testfile" test busybox:v1
#查看本地镜像的提交动作
docker image history busybox:v1

4.系统中文件和容器中的文件传输

bash 复制代码
#把容器中文件复制到本机
docker cp test2:/testfile  /mnt
#把本机文件复制到容器中
docker cp /etc/fstab  test2:/fstab

5.查询容器内部日志:docker logs web

四、docker 镜像构建

1.docker 镜像结构:

共享宿主机的kernel

采用分层结构最大的好处是共享资源

2.镜像运行的基本原理:

copy-on-write可写容器层,容器以下所有镜像层都是只读的,docker从上往下依次查找文件,容器层保存镜像变化的部分,并不会对镜像本身进行任何修改。

3.镜像获取方式:

docker pull 镜像地址

docker load -i 本地镜像包

4.镜像构建参数:

5.dockerfile实例:

bash 复制代码
[root@server1 ~]# mdkir docker
[root@server1 ~]# cd docker/
[root@server1 docker]# cp ~/nginx-1.23.3.tar.gz .
[root@server1 docker]# vim Dockerfile
FROM centos:7
ADD nginx-1.23.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.23.3
RUN yum install -y gcc make pcre-devel openssl-devel
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --with-http_ssl_module --with-http_stub_status_module
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

6.通过dockerfile生成镜像:docker build -t webserver:v1

7.镜像优化示例:

缩减镜像层(docker会将每个指令执行的结果作为一个单独的镜像层,每个镜像层都有自己的文件系统它们相互堆叠):

bash 复制代码
[root@server1 docker]# vim Dockerfile
FROM centos:7 as build
ADD nginx-1.23.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.23.3
RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS
-g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --
with-http_stub_status_module && make && make install && cd .. && rm -fr nginx-
1.23.3 && yum clean all
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

docker build -t webserver:v2

多阶段构建(允许使用多个from语句构建镜像):

bash 复制代码
[root@server1 docker]# vim Dockerfile
FROM centos:7 as build
ADD nginx-1.23.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.23.3
RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS
-g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --
with-http_stub_status_module && make && make install && cd .. && rm -fr nginx-
1.23.3 && yum clean all
FROM centos:7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
相关推荐
梦游钓鱼13 分钟前
在window终端创建docker容器的问题
运维·docker·容器
钢板兽1 小时前
Java后端高频面经——JVM、Linux、Git、Docker
java·linux·jvm·git·后端·docker·面试
flashier2 小时前
C语言 进阶指针学习笔记
c语言·笔记·学习
大白的编程日记.2 小时前
【Linux学习笔记】Linux基本指令分析和权限的概念
linux·笔记·学习
螺旋式上升abc2 小时前
GO语言学习笔记
笔记·学习·golang
W起名有点难2 小时前
前端学习——CSS
前端·css·学习
Moonnnn.3 小时前
51单片机——汇编工程建立、仿真、调试全过程
汇编·笔记·嵌入式硬件·学习·51单片机
EnigmaCoder4 小时前
蓝桥杯刷题周计划(第二周)
学习·算法·蓝桥杯
梵法利亚4 小时前
Ubuntu-docker安装mysql
mysql·ubuntu·docker
littleschemer4 小时前
聊天服务器分布式改造
分布式·spring cloud·qq·聊天室