【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

相关文章

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

Python实现阶乘的四种写法

《Python实现阶乘的四种写法》本文主要介绍了Python实现阶乘的六种写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录第一种:推导式+循环遍历列表内每个元素相乘第二种:调用functools模块reduce的php累计

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op