Docker

发布于:2025-07-27 ⋅ 阅读:(11) ⋅ 点赞:(0)

一、快速入门

1、基础知识

VMware是业界最好用的虚拟机软件之一。Centos7是比较常用的一个Linux发行版本。

先在VMware中创建一个虚拟机,再在虚拟机上安装Centos7系统。

FinalShell 是一款功能强大的国产SSH客户端,SSH/Telnet连接:支持远程登录Linux/Windows服务器。即登录软件去操作linux系统。

启动虚拟机并登录之后可以输入 ip addr 来查看ip地址:ens33网卡往下找。

输入了之后没有ip地址,就输入 ./start-ens33.sh(输入 ll可以查看)

2、命令

#查看版本
docker - v 

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

 3、快速入门

镜像和容器:当我们利用docker安装应用时,Docker会自动搜索并下载应用镜像。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离的环境,称为容器(可以想象成一个小型的linux)。 

镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub

docker安装mysql:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

#实际就一行\是换行
  • docker run 创建并运行一个容器, -d 让容器在后台运行(可以做其他的事情了,如果不加,什么都不能做,命令行会停在那里)
  • 给容器起一个名字,必须唯一
  • -p 3306:3306 设置端口映射 前面是宿主机端口 后面是容器内端口 。 将宿主机(host)的3306端口与容器(container)内部的3306端口建立映射关系,使得外部请求发送到宿主机指定端口时,Docker引擎会自动将这些请求转发到对应容器的目标端口,从而穿透容器默认的网络隔离机制,实现外部对容器内服务的访问。  如果有两个mysql,mysql的端口都是3306是不变的,所以应该改变宿主机的端口。
  • -e  ....   key = value的形式,设置环境变量
  • mysql 是指运行镜像的名字  完整写法      镜像名:镜像版本

二、Docker基础

1、常见命令 

命令

说明

文档地址

docker pull

拉取镜像 (仓库到本地)

docker pull

docker push

推送镜像到DockerRegistry

docker push

docker images

查看本地镜像  配置了别名为dis

docker images

docker rmi

删除本地镜像

docker rmi

docker save

保存镜像到本地压缩文件(虚拟机上)

docker save

docker load -i tar包名

加载本地压缩文件到镜像 -i tar包名

docker load

docker run

创建并运行容器(不能重复创建)

docker run

docker stop

停止指定容器

docker stop

docker start

启动指定容器

docker start

docker restart

重新启动容器

docker restart

docker rm (-f) 容器名

删除指定容器(要先停止) -f 强制删除,不用停止

docs.docker.com

docker ps  (-a)

查看运行中容器  -a 查看所有容器     dps查看简化的

docker ps

docker logs (-f)容器名

查看容器运行日志  -f 持续输出日志  ctrl+c 停止

docker logs

docker exec -it 容器名 bash 

进入容器  -it (添加一个可输入终端,可以交互了)容器名  bash(表示命令行交互类型)    输入exit 退出

docker exec

docker inspect

查看容器详细信息  容器名

docker inspect

 不会写后面的内容就  --help

docker exec -it mysql mysql -uroot -p 直接进入mysql 的命令,省去了进入控制台了 否则需要 docker exec -it mysql bash进入容器,并且进入命令行交互之后输入mysql -uroot -p123

 命令别名:

  • vi ~/.bashrc 找到root目录下的bashrc文件 进入之后点击i/a/o进入插入模式即可插入
  • alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"' alias dis='docker images'添加两个命令别名

  • 退出,按esc退出插入模式,按:进入底行模式,输入wq退出并保存

  • 输入source ~/.bashrc 让其生效

 扩展:文本编辑命令

vim fileName文件存在就打开,文件不存在创建一个新的

底行模式指令

含义

:wq

保存并退出

:q!

不保存退出

:set nu

显示行号

:set nonu

取消行号显示

:n

定位到第n行,如 :10 就是定位到第10行

命令模式指令

含义

gg

定位到文本内容的第一行

G

定位到文本内容的最后一行

dd

删除光标所在行的数据

ndd

删除当前光标所在行及之后的n行数据

u

撤销操作

i 或 a 或 o

进入插入模式(进入后光标所处的位置不同而

 具体看Javaweb 讲义Docs

2、数据卷(volume)

数据卷:是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。

通过: docker volume --help 可以查看所有命令信息

命令

说明

文档地址

docker volume create

创建数据卷

docker volume create

docker volume ls

查看所有数据卷

docs.docker.com

docker volume rm

删除指定数据卷

docs.docker.com

docker volume inspect

查看某个数据卷的详情

docs.docker.com

docker volume prune

清除数据卷

docker volume prune

 卷创建宿主机目录自动创建,所以创建卷之后就该挂载容器目录。

在执行docker run 命令时,使用 -v 数据卷:容器内目录可以完成数据卷挂载。挂载只能在创建容器时挂载。

当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷。

所以要执行的操作就是删除旧的nginx容器,创建新的容器并挂载即可。

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

 在执行docker run命令时, 使用-v 本地目录:容器内目录 可以完成本地目录挂载

注:本地目录必须以“/”或者“./”开头,如果直接以名称开头,会被识别为数据卷而非本地目录

3、自定义镜像

镜像就是包含了应用程序、程序运行的系统函数库,运行配置文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。

镜像结构

镜像文件不是随意堆放的,而是按照操作的步骤分层叠加而成,每一层形成的文件都会单独打包并标记一个唯一id,称为Layer)。这样,如果我们构建时用到的某些层其他人已经制作过,就可以直接拷贝使用这些层,而不用重复制作。

例如,第一步中需要的Linux运行环境,通用性就很强,所以Docker官方就制作了这样的只包含Linux运行环境的镜像。我们在制作java镜像时,就无需重复制作,直接使用Docker官方提供的CentOS或Ubuntu镜像作为基础镜像。然后再搭建其它层即可,这样逐层搭建,最终整个Java项目的镜像结构如图所示:

  

dockerfile

就是一个文本文件,其中包含一个个的指令(Instruction),用指令说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮助我们构建镜像。常见指令有:

指令

说明

示例

FROM

指定基础镜像

FROM centos:6

ENV

设置环境变量,可在后面指令使用

ENV key value

COPY

拷贝本地文件到镜像的指定目录

COPY ./xx.jar /tmp/app.jar

RUN

执行Linux的shell命令,一般是安装过程的命令

RUN yum install gcc

EXPOSE

指定容器运行时监听的端口,是给镜像使用者看的

EXPOSE 8080

ENTRYPOINT

镜像中应用的启动命令,容器运行时调用

ENTRYPOINT java -jar xx.jar

 当Dockerfile文件写好以后,就可以利用命令来构建镜像了。

docker build -t myImage:1.0 .

-t:是给镜像起名,格式依然是repository:tag(名字:版本)格式,不指定tag时,默认为latest

:是指定Dockerfile所在目录,如果就在当前目录,则指定为”.“  

4、网络

自己存在一个网络,但是,容器的网络IP其实是一个虚拟的IP,其值并不固定与某一个容器绑定,如果我们在开发时写死某个IP,而在部署时很可能MySQL容器的IP会发生变化,连接会失败。

加入自定义网络的容器才可以通过容器名相互访问,Docker的网络操作命令如下:

命令

说明

文档地址

docker network create  名字

创建一个网络  (网桥)

docker network create

docker network ls

查看所有网络

docs.docker.com

docker network rm

删除指定网络

docs.docker.com

docker network prune

清除未使用的网络

docs.docker.com

docker network connect

使指定容器连接加入某网络

docs.docker.com

docker network disconnect

使指定容器连接离开某网络

docker network disconnect

docker network inspect

查看网络详细信息

docker network inspect

# 1.通过命令创建一个网络
docker network create hmall
# 2.连接到网络 这样会有两个网络
docker network connect hmall dd

#3.在创建容器时添加 --network hmall 会将默认的网络替代
docker run -d --name dd -p 8080:8080 --network hmall docker-demo

三、项目部署

DockerCompose

通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联Docker容器的快速部署。

首先应编写docker-compose.yml文件:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
    networks:
      - new
networks:
  new:
    name: hmall

对应的docker run 的命令:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v ./mysql/data:/var/lib/mysql \
  -v ./mysql/conf:/etc/mysql/conf.d \
  -v ./mysql/init:/docker-entrypoint-initdb.d \
  --network hmall
  mysql

编写好docker-compose.yml文件,就可以部署项目了。常见的命令:

基本语法如下:

docker compose [OPTIONS] [COMMAND]

其中,OPTIONS和COMMAND都是可选参数,比较常见的有:

类型

参数或指令

说明

Options

-f

指定compose文件的路径和名称

-p

指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念

Commands

up

创建并启动所有service容器

down

停止并移除所有容器、网络

ps

列出所有启动的容器

logs

查看指定容器的日志

stop

停止容器

start

启动容器

restart

重启容器

top

查看运行的进程

exec

在指定的运行中容器中执行命令


网站公告

今日签到

点亮在社区的每一天
去签到