【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镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

如何将Tomcat容器替换为Jetty容器

《如何将Tomcat容器替换为Jetty容器》:本文主要介绍如何将Tomcat容器替换为Jetty容器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat容器替换为Jetty容器修改Maven依赖配置文件调整(可选)重新构建和运行总结Tomcat容器替

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Tomcat的下载安装与使用教程

《Tomcat的下载安装与使用教程》本文介绍了Tomcat的下载、安装和使用方法,包括在本机和云服务器上部署Tomcat的过程,以及解决启动失败问题的方法... 目录Tomcat的下载安装与使用Tomcat的下载与安装Tomcat在本机运行使用Tomcat在php云服务器上的使用总结Tomcat的下载安装与

无需邀请码!Manus复刻开源版OpenManus下载安装与体验

《无需邀请码!Manus复刻开源版OpenManus下载安装与体验》Manus的完美复刻开源版OpenManus安装与体验,无需邀请码,手把手教你如何在本地安装与配置Manus的开源版OpenManu... Manus是什么?Manus 是 Monica 团队推出的全球首款通用型 AI Agent。Man

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc