Docker基本操作

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 查看Docker的默认存储路径用以存放拉取的镜像和创建的容器等docker info

docker

查看Docker的默认存储路径

用以存放拉取的镜像和创建的容器等

docker info

镜像命令

下载镜像:指定版本

docker pull mysql:5.7

展示镜像列表

docker image ls

dokcer images

删除镜像

docker image rm [选项] <镜像1> [<镜像2> ...]

docker rmi -f IMAGE ID  //-f:force强制删除

docker rmi -f $(docker images -aq)  //docker images -aq 展示所有镜像id

容器命令

新建容器并启动

docker run [可选参数] images

-it     使用交互方式运行,进入容器查看内容

-d      后台启动

-p hostport:containerport 指定宿主机port、指定容器port,将宿主机端口映射到容器端口,一个指定宿主机端口上只可以绑定一个容器

//启动并进入容器

[root@iZuf61ii8wkx9swllq8eofZ ~]# docker run -it centos /bin/bash

[root@f6ba11f6933e /]#

列出容器列表

docker container ls

docker ps   //列出打开的容器

docker ps -a    //列出打开和关闭的容器

退出容器

exit    //容器停止并退出

Ctrl+P+Q    //容器不停止退出

进入容器

docker exec -it tomcat01 bash

删除容器

docker rm -f 容器名    //删除指定容器

docker container prune//删除所有终止的容器

启动和停止容器

docker start id //开启容器

docker stop id  //关闭

docker restart id   //重启

docker kill id  //杀死

数据管理

在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。

数据卷

  1. 创建数据卷

docker volume create my-vol // 在宿主机创建一个自定义容器卷

docker volume ls // 查看所有容器卷

docker volume inspect my-vol // 查看指定容器卷详情信息

  1. 启动一个挂载数据卷的容器

在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里。在一次 docker run 中可以挂载多个 数据卷

下面创建一个名为 web 的容器,并加载一个 数据卷 到容器的 /usr/share/nginx/html 目录。

$ docker run -d -P \

   --name web \

   # -v my-vol:/usr/share/nginx/html \

   --mount source=my-vol,target=/usr/share/nginx/html \

   nginx:alpine

如果没有通过-v指定数据卷,那么Docker会默认帮我们创建匿名数据卷进行映射和挂载

设置读写权限

-v只读:docker run -it -v 宿主机目录:容器内目录:ro 镜像名//容器对数据卷可读不可写,宿主机可读可写

--mount只读:--mount type=bind,source=/src/webapp,target=/usr/share/nginx/html,readonly

  1. 查看数据卷的具体信息

在主机里使用以下命令可以查看 web 容器的信息

docker inspect web

"Mounts": [

   {

       "Type": "volume",

       "Name": "my-vol",

       "Source": "/var/lib/docker/volumes/my-vol/_data",

       "Destination": "/usr/share/nginx/html",

       "Driver": "local",

       "Mode": "",

       "RW": true,

       "Propagation": ""

   }

],

  1. 删除指定的数据卷

docker volume rm my-vol

  1. 删除无主的数据卷

docker volume prune

挂载主机目录

  1. 挂载一个主机目录作为数据卷

使用 --mount 标记可以指定挂载一个本地主机的目录到容器中去

$ docker run -d -P \

   --name web \

   # -v /src/webapp:/usr/share/nginx/html \

   --mount type=bind,source=/src/webapp,target=/usr/share/nginx/html \

   nginx:alpine

上面的命令加载主机的 /src/webapp 目录到容器的 /usr/share/nginx/html目录。这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作。

本地目录的路径必须是绝对路径,以前使用 -v 参数时如果本地目录不存在 Docker 会自动为你创建一个文件夹,现在使用 --mount 参数时如果本地目录不存在,Docker 会报错。

  1. 查看数据卷具体信息

在主机里使用以下命令可以查看 web 容器的信息

$ docker inspect web

挂载主机目录 的配置信息在 "Mounts" Key 下面

"Mounts": [

   {

       "Type": "bind",

       "Source": "/src/webapp",

       "Destination": "/usr/share/nginx/html",

       "Mode": "",

       "RW": true,

       "Propagation": "rprivate"

   }

],

数据的覆盖问题

  • 如果挂载一个空的数据卷到容器中的一个非空目录中,那么容器目录下的文件会被复制到数据卷中。(适用于数据卷)
  • 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。(适用于挂载主机目录)

这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。

volumes与bind mounts的区别

  1. volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中
  2. bind mounts:意为着可以存储在宿主机系统的任意位置

但是,bind mount在不同的宿主机系统时不可移植的,比如Windows和Linux的目录结构是不一样的,bind mount所指向的host目录也不能一样。这也是为什么bind mount不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。


Tomcat

  1. 拉取镜像

docker pull tomcat

  1. 创建容器,重命名为tomcat01,并将容器端口8080映射到服务器的3355端口

docker run -d -p 3355:8080 --name tomcat01 tomcat

  1. 进入容器(通过别名)

docker exec -it tomcat01 bash

docker@ggbond:~$ docker exec -it tomcat01 bash                                

root@156f0cbfb9ae:/usr/local/tomcat#

  1. webapps下面是空的,可以将webapps.dist下的文件复制到webapps中

cp -r webapps.dist/* webapps

mysql

docker pull mysql:5.7

docker run -d -p 3310:3306 -v /home/mysql/config:/etc/mysql/config.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

--name:容器名字

-e:配置mysql密码

-d:后台运行

-p:端口映射

-v:卷挂载

docker exec -it mysql01 bash


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
数据库 Docker 容器
Mac 下Docker操作SQLServer数据库
Mac 下Docker操作SQLServer数据库
56 0
|
4天前
|
Docker 容器
【Docker】掌握 Docker 镜像操作:从基础到进阶
【Docker】掌握 Docker 镜像操作:从基础到进阶
|
4天前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI 操作报错合集之在本地构建easyrec docker镜像时遇到了无法连接docker服务如何解决
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
4天前
|
应用服务中间件 Shell Linux
docker 基本用法-操作镜像
docker 基本用法-操作镜像
87 6
|
4天前
|
NoSQL 关系型数据库 MySQL
安装Docker&镜像容器操作&使用Docker安装部署MySQL,Redis,RabbitMQ,Nacos,Seata,Minio
安装Docker&镜像容器操作&使用Docker安装部署MySQL,Redis,RabbitMQ,Nacos,Seata,Minio
473 1
|
4天前
|
Linux Shell Docker
Docker容器操作
Docker容器操作
|
4天前
|
NoSQL 应用服务中间件 nginx
【Docker】3、Docker 基本操作【容器操作】
【Docker】3、Docker 基本操作【容器操作】
27 0
|
4天前
|
NoSQL 应用服务中间件 nginx
【Docker】2、Docker 基本操作【镜像操作】
【Docker】2、Docker 基本操作【镜像操作】
41 0
|
4天前
|
消息中间件 网络协议 Kafka
win10中docker安装kafka环境和操作
win10中docker安装kafka环境和操作
|
4天前
|
Ubuntu Unix Linux
Linux系统Ubuntu以非root用户身份操作Docker的方法
Linux系统Ubuntu以非root用户身份操作Docker的方法