【docker1】docker的下载安装、容器与docker、Dockerfile的写法

2024-09-05 04:52

本文主要是介绍【docker1】docker的下载安装、容器与docker、Dockerfile的写法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 容器

1、容器1、什么是容器?用镜像启动的一个对外可以提供服务的进程即为容器。1、容器的本质是进程2、容器是由镜像创建的,跟镜像中保存的内容完全一致。3、容器与容器之间是完全隔离的(可以理解为国中之国)4、每一个容器都需要做的是尽量保持自己的体积足够的小。2、容器的生命周期容器之内必须至少有一个进程运行在前台。如果一个进程都没有的话,那么此容器就相当于完成了它的声明周期。3、容器的基本使用0、查看本机容器列表docker ps # 查看本机容器列表[root@docker ~]# docker psCONTAINER ID   IMAGE     COMMAND   CREATED  		 STATUS    PORTS     NAMES容器的ID		镜像 容器的启动命令 容器的创建时间   容器的状态 容器的端口 容器的名称STATUS:UP : 		启动状态Exited :	停止状态Created :  容器已经创建,当时没有启动参数:-a : 查看系统上所有的容器(包含未启动)-q : 只显示容器ID1、创建容器docker run		# docker run是创建并启动容器docker create 	# docker create是创建容器docker create 中的参数跟 docker run 类似 主要其本身的功能不同。docker run 格式:docker run [参数] 镜像  [启动命令]参数和启动命令可以省略。容器的启动流程:①:查看本地是否存在正在使用的镜像。②:如果本地不存在使用的镜像,则去仓库下载③:根据镜像来启动容器参数:-d 	: 以守护进程方式运行容器。--name : 自定义容器的名称[root@docker ~]# docker run -d --name nginx  nginx-p 		: 指定一个端口映射-P		:随机一个端口映射-i		: 打开标准输出-t		:创建一个终端-e		:在容器内部增加一个环境变量-h		: 指定一个主机名(默认的主机名是容器的缩写版ID )-v 		: 指定一个挂载卷(将宿主主机的目录挂载到容器内,从而实现文件互通)--network	: 链接一个网桥--link		: 链接一个容器在宿主主机上执行一个容器内部的命令docker exec [容器的ID或名称] [需要在容器内部执行的名]docker exec centos3 printenv 启动一个容器docker start [容器的名称|ID][root@docker opt]# docker start centos62、停止容器docker stop [容器的名称|ID]3、删除容器docker rm [容器的名称|ID]docker rm -f [容器的ID或名称]案例:删除所有容器:docker rm -f $(docker ps -a -q)4、查看容器详细状态docker inspect [容器的ID或名称]案例:要求判断指定容器是否正在运行?docker inspect -f '{{ .State.Running }}'  2d4f2e701fa85、复制容器中的内容1、将容器内的文件复制到宿主主机docker cp [容器的ID]:[文件路径]  宿主主机路径docker cp ae1cde866e07:/root/init.sh /tmp/2、将宿主主机上的内容复制到容器docker cp [宿主主机路径] [容器的ID]:[文件路径]docker cp init.sh ae1cde866e07:/root/6、进入容器1、attachattach是进入容器,原理是将容器内的PID为1的进程开辟一个管道,链接到宿主主机。当在宿主主机上退出时,容器也随即退出(结束了生命周期)2、exec(推荐)exec其本质是在宿主主机上执行一个容器内的命令,但是加上-it参数,可以达到进入容器的效果,其原理是在容器内部新创建一个bash进程。所以当exec退出时不影响容器的正常运行。docker exec -it [容器的名称] [进入容器执行的命令]3、nsenternsenter的原理是建立一个管道进程,链接到容器的内部。nsenter --target $( docker inspect -f '{{.State.Pid }}'  ) --mount --uts --ipc --net --pid[root@docker ~]# nsenter --target $( docker inspect -f '{{.State.Pid }}' centos ) --mount --uts --ipc --net --pid4、ssh的方式(及其不推荐)7、保存容器为镜像1、保存镜像(针对点是镜像)将镜像打包,发送到远程服务器docker save # 将镜像保存成压缩包[root@docker ~]# docker save -o image.tar    nginx:latest   centos:latest[root@docker ~]# docker save > image.tar  nginx:latest   centos:latestdocker load # 将镜像包导入本地镜像中[root@docker ~]# docker load -i image.tar [root@docker ~]# docker load < image.tar 2、保存容器为镜像(针对点是容器)将容器打包成镜像1、将容器保存成镜像docker exportdocker export -o nginx.tar  modest_tharp2、将镜像包导入本地镜像中docker import docker import nginx.tar nginx:v13、保存容器将容器保存成本地镜像docker commit docker commit -a "ShanHe" -m "这是一个弟弟" -p modest_tharp   nginx:v28、查看容器的运行日志docker logs [容器的ID或名称]docker logs modest_tharp参数:-f : 持续监控docker logs -f modest_tharp9、暂停容器和重新运行容器容器将暂停服务docker pause modest_tharp重新运行容器,恢复提供和服务docker unpause modest_tharp10、容器的运行状态案例:用容器搭建一个小游戏1、代码(宿主主机)2、将目录映射到容器3、映射端口docker run -d --name mario -v /opt/html5-mario:/usr/share/nginx/html -p 8080:80  nginx4、浏览器测试

2 docker

1、Docker1、现有的互联网架构的劣势1000台虚拟机(CentOS 7)1、保证百分百不宕机CentOS 7  :  systemctl start mysqldCnetOS 6service mysqld start CentOS 7  :  yum install mysql Ubuntu 16 :  apt-get install mysqlbusybox   : apt install mysql 2、要求自动化(Ansible)service : name: mysqld yum:name: mysqlwhen: apt:name: mysqlwhen 3、自动化运维(Python 操作 Ansible)4、如果我们的虚拟机不支持我们所需要安装的机器的时候?5、怎样保证快速稳定的部署并运行应用?需要一个提前打包好了的,拿来就能运行的应用,而且需要支持各种异构环境的服务变得尤为重要。镜像  --->  容器  --->  运行一个容器隔离的环境  --->  容器2、Docker简介docker是一个容器工具,包含docker中的三大概念:镜像、容器以及仓库。容器编排工具docker三剑客kubernetes    占领容器编排市场90% 3、安装Dockerdocker分为企业版和社区版企业版	: docker 社区版	: docker-ce https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/# 安装依赖包yum install -y yum-utils device-mapper-persistent-data lvm2# 安装yum源yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo# 安装 [root@localhost ~]# yum install docker-ce-19.03.9 -y4、镜像1、什么是镜像?用来启动容器的模板,镜像一般是存在镜像仓库中的。镜像仓库地址:https://hub.docker.com/search?type=image仓库分为三种:官方仓库:		hub.docker.com第三方仓库:	https://cr.console.aliyun.com/cn-hangzhou/instance/repositories自建仓库	:  haobor2、镜像的相关命令1、搜索镜像[root@localhost ~]# docker search centosNAME                              DESCRIPTION                                     STARS     OFFICIAL          AUTOMATEDcentos                            The official build of CentOS.                   6809      [OK]       ansible/centos7-ansible           Ansible on Centos7                              135                           [OK]镜像的名称						该镜像的介绍							镜像的收藏数  是否是官方镜像       是否是自建镜像2、下载镜像[root@localhost ~]# docker pull centos镜像名称的构成:[仓库URL]/[仓库的名称空间]/[仓库的名称]:[镜像的版本号]默认的仓库URL:docker.io默认的仓库名称空间:library仓库的名称:没有默认镜像版本号:默认是latest3、查看本地镜像列表docker images 或者 docker image ls[root@localhost ~]# docker images REPOSITORY   TAG       IMAGE ID       CREATED       SIZEcentos       latest    5d0da3dc9764   5 weeks ago   231MBREPOSITORY:[仓库URL]/[仓库的名称空间]/[仓库的名称]TAG	: 版本号IMAGE ID : 缩写版的镜像IDCREATED	:创建该容器到现在的时间SIZE	:镜像大小[root@localhost ~]# docker image lsREPOSITORY   TAG       IMAGE ID       CREATED       SIZEcentos       latest    5d0da3dc9764   5 weeks ago   231MB4、查看镜像的详情docker inspect [镜像名称或ID]5、更改镜像的名称docker tag [原来的名称] [新名称]6、上传镜像将镜像上传至远程仓库。1、登录仓库2、修改镜像名称docker tar  registry.cn-hangzhou.aliyuncs.com/k8sos/centos:v13、上传镜像docker push [仓库URL]/[仓库的名称空间]/[仓库的名称]:[版本号]7、登录仓库docker login [仓库URL]仓库URL默认是:docker.io 8、创建镜像9、删除镜像docker rmi [仓库的名称ID]docker rmi [root@localhost ~]# docker rmi test:v110、修改镜像镜像一旦被创建,将无法进行修改,除非重新创建。11、查看镜像的构建历史[root@localhost ~]# docker history centosIMAGE          CREATED       CREATED BY                                      SIZE      COMMENT5d0da3dc9764   5 weeks ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        <missing>      5 weeks ago   /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        <missing>      5 weeks ago   /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0…   231MB  

Dockerfile的写法

1、访问容器中的服务1、端口映射2、使用IP# 构建镜像1、Dockerfile规范:Dockerfile命名必须D大写其他必须小写。Dockerfile中所有的指令必须大写构建镜像的命令docker build 参数:-t : 指定构建镜像的名称1、FROM指定基础镜像。在Dockerfile中唯一一个必须项。2、RUN在构建镜像时,运行指定的命令。注意:运行的命令必须是基础镜像中包含的命令;执行的结果直接保存在镜像中。3、ADD将指定的文件上传到镜像中。4、COPY将指定的文件复制到镜像中。COPY 和 ADD 之间的区别?1、ADD支持自动解压功能(只支持tar包解压),COPY不支持2、ADD支持通过URL下载文件(不支持自动解压),COPY不支持5、EXPOSE指定容器需要向外暴露的端口如果没有指定任何端口,可以使用-p做端口映射,但是不能使用-P做端口映射。6、VOLUME指定挂在卷,指定的挂载卷并不是设置了就挂载到指定的目录。当容器启动的时候,如果添加了-v参数,以-v参数为准,如果没有,则在宿主主机上的/var/lib/docker/volumes,随机映射。7、CMD指定一个容器的启动命令。全局只能有一个,如果有多个,最后一个生效。exec格式["nginx", "-g", "daemon off;"]shell格式nginx -g 'daemon off;'8、WORKDIR设置工作目录。运行应用程序时的启始目录(默认是根目录),可以这样理解,执行命令时相对路径的原始目录。9、ARG设置运行时变量。案例:要求写一个Dockerfile,实现每次安装的软件都是自定义。[root@kubernetes docker]# docker build --build-arg=PACKAGE=zsh -t nginx:v15 .10、ONBUILD触发器,ONBUILD后面跟指令,在构建是不会执行,当当前镜像作为基础镜像构建时执行。11、ENV设置一个环境变量。12、MAINTAINER设置维护者信息。13、ENTRYPOINT设置启动命令。ENTRYPOINT 和 CMD 的区别1、ENTRYPOINT 作为启动命令时无法被docker run覆盖(如果docker run指定命令,会被认为成ENTRYPOINT的参数)。
2、如果ENTRYPOINT和CMD指令同时存在,则CMD的相关内容会被设置成ENTRYPOINT的参数2、使用Dockerfile构建项目构建MySQL、PHP已经nginx镜像,实现搭建discuzGRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;FLUSH PRIVILEGES;# docker-compose # Horbor私有仓库server {server_name _;listen 80;root /usr/share/nginx/html;location / {index index.php ;}location ~* \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}

这篇关于【docker1】docker的下载安装、容器与docker、Dockerfile的写法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137999

相关文章

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

docker 重命名镜像的实现方法

《docker重命名镜像的实现方法》在Docker中无法直接重命名镜像,但可通过添加新标签、删除旧镜像后重新拉取/构建,或在DockerCompose中修改配置文件实现名称变更,感兴趣的可以了解一下... 目录使用标签(Tagging)删除旧的php镜像并重新拉取或构建使用docker Compose在Do

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

Spring Boot中获取IOC容器的多种方式

《SpringBoot中获取IOC容器的多种方式》本文主要介绍了SpringBoot中获取IOC容器的多种方式,包括直接注入、实现ApplicationContextAware接口、通过Spring... 目录1. 直接注入ApplicationContext2. 实现ApplicationContextA

linux配置podman阿里云容器镜像加速器详解

《linux配置podman阿里云容器镜像加速器详解》本文指导如何配置Podman使用阿里云容器镜像加速器:登录阿里云获取专属加速地址,修改Podman配置文件并移除https://前缀,最后拉取镜像... 目录1.下载podman2.获取阿里云个人容器镜像加速器地址3.更改podman配置文件4.使用po

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践