超详细、认识使用Docker

目录

1、Docker是什么?

2、镜像和容器是什么?

3、docker常用命令合集

拉取镜像

保存、导入镜像

 创建镜像

删除镜像

 运行容器

进入容器

退出终端

查看容器

删除操作

上传文件到容器

重命名镜像和容器

将容器提交为镜像

数据卷操作

4、什么是数据卷?

5、数据卷的常用操作命令合集

命令格式

 创建数据卷

查看数据卷 

 查看全部数据卷

 查看某个数据卷的信息

删除数据卷

删除某个数据卷

 删除所有未使用的数据卷

数据卷挂载

6、通过Dockerfile构建自定义镜像

7、通过DockerCompose 一次性部署多个服务


1、Docker是什么?

Docker是一种开源的容器化平台,用于构建、管理和部署应用程序。它通过容器化技术,将应用程序及其所有依赖项打包在一个独立的、可移植的容器中,以便在任何环境中执行。Docker容器是轻量级、可隔离和可复制的,可以在不同的操作系统和云平台上运行。

我的理解是这样的:

在软件开发中,要运行的程序就是蛋糕,要把蛋糕送给不同的人,每个不同的人就相当于不同的计算机环境。Docker可以把应用程序和它所需要的所有部分(例如库文件、配置)打包在一起,形成一个独立的镜像。这个镜像可以通过容器轻松地在任何计算机上运行,而不会受到其他应用程序的干扰,并且可以在不同的操作系统和云平台上使用。(即蛋糕店把蛋糕和装饰的配件打包在一起,放在蛋糕盒子里,蛋糕可以通过蛋糕盒子的保护,不受其他外界因素的干扰,顺利到达顾客的手上,容器就是蛋糕盒子)Docker容器就像蛋糕盒子一样,是轻巧、可隔离和可复制的。它可以简化应用程序的部署和管理过程,提供了更高效、更可靠的方式来交付和运行应用程序。

2、镜像和容器是什么?

        镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。一个镜像可以运行多个容器。

        容器(Container):容器是镜像中的应用程序运行后形成的进程,Docker会给容器做隔离,对外不可见。

        DockerHub:Docker镜像托管平台,镜像服务器。称为Docker Registry。

3、docker常用命令合集

         

拉取镜像

//查看镜像的可用版本
docker search [name]

//拉取镜像
docker pull [name]:[version]

//比如拉取centos
docker pull centos:centos7
//拉取MySQL
docker pull mysql:latest

//查看已安装的镜像
docker images

//查看指定镜像的版本
docker images|grep [name]
 

镜像名称获取途径:可通过访问dockerhub官网Docker Hub Container Image Library | App Containerization搜索镜像来获取镜像的名称版本和完整的拉取镜像命令

保存、导入镜像

//保存镜像到磁盘
docker save -o [保存的目标文件名称] [镜像名称]

如:docker save -o nginx.tar nginx:latest

//(加载)导入镜像   注:加载前,保证没有相同的镜像存在
docker load -i [镜像的压缩包名称]

//如:docker load -i nginx.tar

 创建镜像

docker build -t myimage .

这将在 当前 文件夹中查找名为 "Dockerfile" 的文件,并使用它来构建镜像。构建过程中的文件和依赖项将被打包到镜像中。

  • -t <镜像标签>: 指定构建生成的镜像的标签。
  • -f <Dockerfile路径>: 指定要使用的Dockerfile路径。如果不指定,默认使用当前路径下名为 "Dockerfile" 的文件。
  • --no-cache: 在构建过程中禁用缓存,强制重新下载所有依赖项,以确保最新版本。
  • --pull: 在构建过程中尝试拉取最新的基础镜像。
  • --build-arg <变量名称>=<值>: 设置构建过程中使用的构建参数,可以在Dockerfile中使用。
  • --network <网络模式>: 指定构建过程中使用的网络模式。

删除镜像

docker rmi 镜像名

 运行容器

//新建一个容器
docker run -itd --name server1 -v /data/workspace:/home/workspace --privileged=true -p 6500:6501 centos:centos7 /bin/bash

//启动一个已停止的容器
docker start [container_id]

//重启容器
docker restart [container_id]
 

参数说明:

-i:交互式操作,保持STDIN开放                                        

-t:为容器分配一个虚拟终端并连接到容器的STDIN                                 

-d:以后台方式运行容器,并返回容器ID,此模式下默认不会进入容器,如果需要进入容器需要用:

       docker exec -it 容器名字或ID /bin/bash

--name:容器的名字

-v: 指定挂载目录

/data/workspace:/home/workspace:在主机和容器之间创建一个数据卷。这将主机上的/data/workspace目录挂载到容器的/home/workspace目录

--privileged=true:这将赋予容器一些特权,允许容器内的进程有几乎同主机一样的权限,默认情况下为false。

-p: [外部端口号]:[所映射的容器内部端口号]

centos:centos7 :在CentOS7的环境下运行容器

/bin/bash: 放在镜像名后的是命令,容器启动后,执行的首个命令。在这里,它将运行bash shell。

进入容器

//进入容器
docker exec -it mn bash

mn:容器名称

退出终端

//退出终端
exit

或者
Ctrl + P + Q
 

查看容器

//查看所有容器
docker ps -a

//查看运行中的容器
docker ps

删除操作

//删除容器
docker rm [container_id]

//删除镜像
docker rmi [images_id] 

上传文件到容器

//上传文件到某个容器
docker cp [文件路径] [容器名]:[容器中的路径]
 

重命名镜像和容器

//镜像重命名
docker tag [OPTIONS] IMAGE[:TAG] 
  [REGISTRYHOST/[USERNAME/]NAME[:TAG]

//比如:假设你有一个镜像 my_image:1.0,你想要重命名它为 new_image:2.0
docker tag my_image:1.0 new_image:2.0
//如果你想将镜像推送到 DockerHub,你需要将你的 DockerHub 用户名包含在镜像名中,如下所示:
docker tag my_image:1.0 yourusername/new_image:2.0
//然后,你可以使用 docker push 命令将这个新命名的镜像推送到 DockerHub:
docker push yourusername/new_image:2.0

//容器重命名
docker rename 
 

将容器提交为镜像

docker commit [OPTIONS] CONTAINER(容器id or 名) [REPOSITORY[:TAG]]
 
  • -a :提交的镜像作者;

  • -c :使用Dockerfile指令来创建镜像;

  • -m :提交时的说明文字;

  • -p :在commit时,将容器暂停。

数据卷操作

//创建数据卷
docker volume create [name]

//查看所有数据卷
docker volume ls

//查看数据卷详细信息,包括关联的宿主机目录位置
docker volume inspect [name]

//删除指定的数据卷
docker volume rm [name]

//删除所有未使用的数据卷
docker volume prune

//创建容器并挂载数据卷   mn:容器的名称  -v:挂载命令,格式为"-v [数据卷name]:[容器内目录]"或"-v [宿主机文件]:[容器内文]"或"-v [宿主机目录]:[容器内目录]"
docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

4、什么是数据卷?

数据卷(Data Volumes)是Docker中一种用于持久化存储和共享数据的机制,是一个虚拟目录,指向宿主机文件系统中的某个目录。 。它提供了一种在容器和主机之间共享数据的方式,使得数据能够在不同的容器之间传递、持久保存,甚至可以与宿主机进行共享。 

通俗理解:想象一下,你住在一个宿舍里,每个人都有自己的房间。现在,你们要共享一些物品,比如一台音响或者一本书。数据卷就像是一个公共的储物柜,可以用来放置这些共享物品。

在这里,宿舍就好比是Docker容器,每个房间就是一个个独立的容器,而数据卷就是一个大家共同使用的空间。你们可以把物品放进去,每个人都可以自由地从储物柜中取出物品或者放入物品。这样一来,无论是谁需要使用这些共享物品,都可以很方便地获取到。

另外,这个公共储物柜也和外面的世界连接着,任何人都可以从外面往里放入物品,或者从里面拿出物品。就好像数据卷可以和宿主机的文件系统进行绑定,宿主机可以将一些数据放入到数据卷中,供容器中的应用程序使用,也可以从容器中将数据取出来。

所以,数据卷就是一个方便大家共享、存储和传递数据的机制,使得容器和宿主机之间的数据交流更加便捷和可靠。它就像是一个共享的储物柜,让大家可以自由地存放和取用共享物品。

数据卷就像宿主机和容器之间的一根线,通过数据卷挂载后,用户操作宿主机的目录,操作会通过这根线影响到容器的目录。

 一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。 我们操作宿主机的/var/lib/docker/volumes/html目录,也就等于操作容器内的/usr/share/nginx/html目录。

5、数据卷的常用操作命令合集

命令格式

docker volume [COMMAND]

 [COMMAND]的内容如下:

  • create 创建一个volume

  • inspect 显示一个或多个volume的信息

  • ls 列出所有的volume

  • prune 删除未使用的volume

  • rm 删除一个或多个指定的volume  

 创建数据卷

docker volume testvolume

查看数据卷 

 查看全部数据卷

docker volume ls

 

 查看某个数据卷的信息

docker volume inspect testvolume

 testvolume数据卷关联的宿主机目录为"/var/lib/docker/volumes/testvolume/_data"。

删除数据卷

删除某个数据卷

docker volume rm testvolume

 删除所有未使用的数据卷

docker volume prune

数据卷挂载

一般在创建容器并运行时使用-v参数进行挂载 

docker run \
  --name tt \
  -v testvolume:/usr/share/nginx/html \
  -p 8080:80
  nginx \

这句命令创建并运行一个叫tt的容器,使用-v参数把testvolume数据卷挂载到容器的/usr/share/nginx/testvolume目录下,使用-p参数把宿主机的8080端口映射到容器的880端口,这个tt容器运行一个叫nginx的镜像。

 挂载后,查看数据卷在宿主机的位置:

docker volume inspect testvolume

进入该目录:

cd /var/lib/docker/volumes/testvolume/_data

就可以进行各种操作,比如修改文件:

vi index.html

操作完后,这些的操作也会作用到容器中。

6、通过Dockerfile构建自定义镜像

 官方文档:Dockerfile reference | Docker Docs

Dockerfile文档的指令不区分大小写,但是官方建议把指令写成大写,以便区分参数和指令。

Docker把#开头的行视为注释,注释不能和命令写在同一行,不然会被视作参数。

Dockerfile必须以FROM指令开始。

例子:

前端代码的简单Dockerfile示例:

后端代码的简单Dockerfile文件示例:

7、通过DockerCompose 一次性部署多个服务

Docker Compose是Docker的一个开源项目,它的目标是通过一个简单的YMLJSON格式的文件来定义和运行多个相互连续的Docker容器

对于那些由多个容器协同工作的应用(例如一个Web服务器和一个数据库服务器),用户需要分别启动各个容器并进行配置,这是一个复杂且容易出错的过程。Docker Compose的目标就是通过自动化这个过程,使得用户可以更易于启动和管理多容器应用。

通过Docker Compose,你可以在一个compose文件(例如docker-compose.yml)中定义应用的服务,每个服务实际上就是一个容器。然后,通过一个简单的命令docker-compose up,就可以一次性创建并启动所有的服务。

总之,Docker Compose提供了一种简便的方式来定义和运行多容器的Docker应用,从而极大地提升了使用者的效率。

例子:

version: "3.8"
 services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    volumes:
     - "/tmp/mysql/data:/var/lib/mysql"
     - "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
    ports:
      - 3306:3306
  web:
    build: .
    ports:
     - "8090:8090"

  • mysql:一个基于mysql:5.7.25镜像构建的容器,并且挂载了两个目录

  • web:一个基于docker build临时构建的镜像容器,映射端口时8090

猜你喜欢

转载自blog.csdn.net/weixin_51451545/article/details/132565671