跳过正文
  1. 文章/
  2. 云原生/
  3. Docker/
  4. Docker基础/

2、Docker的使用

·2903 字·6 分钟· loading · loading · ·
云原生 Docker Docker基础
GradyYoung
作者
GradyYoung
目录
Docker基础 - 点击查看当前系列文章
§ 2、Docker的使用 「 当前文章 」

Docker相关命令
#

帮助启动类
#

启动、重启、停止docker
#

systemctl start|restart|stop docker

查看docker状态
#

systemctl status docker

查看docker概要信息
#

docker info

查看docker总体帮助文档
#

docker --help

查看docker命令帮助文档
#

docker [command] --help

镜像类
#

查看本地镜像
#

如果一个镜像仓库名和tag都是<none>,那么就称为虚悬镜像(dangling image)

docker images
-a #列出本地所有镜像,含历史映像层
-q #只显示镜像id

查询镜像
#

docker search [name]
--limit [size] #最显示size个,默认25个

拉取镜像
#

docker pull [name]
docker pull [name]:[tag]

查看镜像、容器、数据卷所占空间
#

docker system df

删除镜像
#

docker rmi [name/id] [name/id] ...
-f #强制删除,如果提示该镜像使用过无法删除,可以使用这个参数
${docker images -qa} #删除全部镜像

导入导出镜像
#

可以将镜像保存为tar文件

docker save -o [tarpath] [imagename/id]
docker save [imagename/id]>[tarpath]
docker load<[tarpath]
docker tag [id] [name:tag]

容器类
#

新建并启动容器
#

docker run [options] [name/id] [command] [arg...]
--name=[name] #为容器指定一个名字con
-d #后台运行并返回容器id,也就是启动守护式容器
-i #以交互式运行容器,通常与-t一起使用
-t #为容器重新分配一个伪输入终端,通常与-i一起使用,通常在整个run命令后加/bin/bash
-P #随机端口映射
-p [hostport:containerport] #指定端口映射
-v [hostpath:containerpath] #将容器中的目录映射到宿主机目录,一定要配合--privileged=true使用
-e [key=value] #设置容器内的环境变量
--privileged=true #将容器的权限,设置为最高权限root

注意:docker容器运行必须要有一个前台进程,容器运行的命令如果不是一直挂起的命令(top、tail等)就会自动退出,一般可以使用-dit

避坑:如果在启动时出现警告IPv4相关
#

WARNING: IPv4 forwarding is disabled. Networking will not work.

#进行编辑配置文件
vi /usr/lib/sysctl.d/00-system.conf
#在其中添加一段
net.ipv4.ip_forward=1
#重启网络
service network restart

查看容器
#

docker ps
-a #查看所有运行的容器,包括已经退出的
-n [size] #查看最近size个容器
-l #查看最近创建的一个容器
-q #只显示容器编号

退出容器
#

exit #退出容器,并且容器停止
ctrl+p+q #退出容器,容器不会停止

启动已停止容器
#

docker start [name/id]

重启正在运行的容器
#

docker restart [name/id]

停止正在运行的容器
#

docker stop [name/id]
docker kill [name/id] #强制停止

删除已停止的容器
#

docker rm [name/id]
-f #强制删除,可删除正在运行的

进入容器
#

docker exec -it [name/id] /bin/bash
docker attach [name/id]
#区别:
attach直接进入容器启动命令的终端,不会启动新的线程,exit会导致容器停止
exec在容器中打开新的终端,并且会启动新的线程,exit不会导致容器停止

查看容器日志
#

docker logs -f [name/id]

查看容器内运行的进程
#

docker top [name/id]

查看容器内部细节
#

docker inspect [name/id]

从容器内拷贝文件到主机
#

docker cp [containername/id]:[containerpath] [localpath]

从主机拷贝文件到容器
#

docker cp [localpath] [containername/id]:[containerpath]

导入导出容器
#

docker export [containername/id] > [name.tar]
cat [name.tar] | docker import - name:tag

容器保存为镜像
#

docker commit -a=[作者] -m=[备注] [容器ID] [仓库名称]:[TAG]
#注意:挂载类似软连接(快捷方式),挂载目录新增文件在容器中不会新增,容器只是引用了挂载目录的新增文件,本地容器打包为本地镜像前必须将宿主机的挂载目录新增文件拷贝到对应的容器目录中,否则挂载目录的新增文件无法被打包到本地镜像

跨平台使用
#

在 Docker 中,平台是指硬件和操作系统的组合。不同的硬件架构和操作系统版本具有不同的特性和限制。常见的硬件架构包括 x86、 x86_64、 ARM 和 ARM64 等,常见的操作系统包括 Linux、 Windows 和 macOS 等。

  • 拉取镜像:docker pull --platform=linux/amd64 [imagename]
  • 构建镜像,此时dockerfile中的基础镜像可以选择自己需要的平台:FROM --platform=linux/amd64 [imagename]
  • 运行镜像:docker run --platform=linux/amd64 [imagename]

支持的平台
#

Docker 支持的平台非常广泛,包括但不限于以下几种:

  • linux/amd64:x86 架构的 Linux 系统,例如常见的 PC 和服务器。
  • linux/arm64:ARM 架构的 Linux 系统,例如 Raspberry Pi。
  • linux/ppc64le:IBM Power 架构的 Linux 系统。
  • linux/s390x:IBM Z 架构的 Linux 系统。

另外,还可以使用通配符来指定多个平台。例如,linux/* 表示所有的 Linux 平台,*/*表示所有的平台。

Docker安装、启动常用镜像
#

一、Docker安装MySQL
#

  1. 从官网上https://hub.docker.com/ 进行镜像的搜索(推荐)
  2. 或者使用docker search mysql进行命令查找

1、下载MySQL镜像
#

  • 在Xshell中,执行如下命令,即可下载镜像

    • docker pull mysql:5.7
    • pull:是下拉的意思
    • mysql:是镜像的名称
    • 5.7:是镜像的版本
  • 校验镜像是否下载完成

    • docker images

image-20210904121942614

2、Docker后台模式运行MySQL
#

  • Docker容器的运行命令是:docker run

    • docker run --name mysql01 -p 3306:3306 -v /root/mysql/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
      
  • 属性:

    • --name mysql01:给Docker容器 定义一个名称mysql01
    • -p 3306:3306:将宿主机的3306 映射到Docker容器内部的3306上 (第1个是外部的)
    • -v /root/mysql/data:/var/lib/mysql:表示目录映射关系(前者":前"是宿主机目录,后者是容器被映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    • --privileged=true:将Docker容器的权限,设置为最高权限 root
    • -e MYSQL_ROOT_PASSWORD=123456:配置Docker内部的环境变量
    • -d:让容器在后端运行
    • mysql:5.7:镜像的名称
  • 检验Docker容器是否启动成功

    • docker ps

避坑:docker中MySQL的默认字符集编码是latin1,插入中文会出现乱码show variables like 'character%'

3、使用navicat链接mysql
#

image-20210904130251065

4、Docker前台模式运行MySQL
#

  • docker run --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 -i -t -v /root/mysql/data:/var/lib/mysql --privileged=true mysql:5.7 /bin/bash
    
    • -i:以前台运行模式进行启动docker容器
    • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
    • /bin/bash:让容器启动完毕后,开启一个内部进程

img

  • 这种模式有个特点是:退出容器内部,Docker容器将会自动关闭

前台模式和后台模式的区别
#

  • 前台模式的特点:启动之后就立马进入到docker内部
  • 后台模式的特点:启动之后,我们的程序依旧在物理上
  • 推荐使用****:后台模式启动

5、生产环境使用MySQL
#

启动命令,对日志、数据、配置进行数据卷备份

docker run -d -p 3306:3306 --privileged=true
-v /docker/mysql/log:/var/log/mysql
-v /docker/mysql/data:/var/lib/mysql
-v /docker/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
--name mysql
mysql:5.7

在宿主机/docker/mysql/conf路径下,添加配置文件my.conf解决中文乱码

[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8

重启mysql,使配置文件生效

docker restart mysql

二、Docker安装Tomcat
#

  • 在https://hub.daocloud.io/网站上,输入tomcat进行镜像查找

1、下载镜像
#

docker pull daocloud.io/library/tomcat:8.5.15-jre8
  • 检验下载docker images

image-20210904130738946

2、运行镜像
#

docker run -d -p 8080:8080 --name mytomcat daocloud.io/library/tomcat:8.5.15-jre8

3、进行访问
#

image-20210904133118529

4、挂载war文件
#

4.1、运行tomcat,并且-v声明docker数据卷
#
docker run -d -p 8080:8080 --name mytomcat --privileged=true -v /root/tomcat/webapps:/usr/local/tomcat/webapps daocloud.io/library/tomcat:8.5.15-jre8

运行完成,可以在目录中看到创建的数据卷目录

image-20210904133952720

  • 数据卷
    • 作用
      • 通过-v 宿主机目录:容器中目录,将容器里面的目录,映射到宿主机上,可以在宿主机对容器类的文件进行更改,同步到容器
    • 好处
      • Docker容器是一种“沙箱”机制,会将容器的环境,容器产生的数据等,统一放置在Docker容器内部。有的时候,可能会出现问题:比如MySQL容器突然异常,无法重启,那么容器内部的数据,也就跟着丢失掉了,使用数据卷就可以解决
4.2、上传war文件
#

将war文件上传到数据卷目录中

image-20210904141624203

4.3、进行访问
#

image-20210904141959739

如果访问不到,重启一次容器,就可以了

docker restart mytomcat
Docker基础 - 点击查看当前系列文章
§ 2、Docker的使用 「 当前文章 」