Java随笔 | Linux下Docker的安装与常用命令

文章目录

  • 一、Docker的基础概念
    • 1.1 Docker介绍
    • 1.2 Docker中的对象
  • 二、Linux下Docker的安装
  • 三、image相关命令
  • 四、container相关命令
    • docker run命令
  • 五、network相关命令
  • 六、构建镜像


一、Docker的基础概念

1.1 Docker介绍

Docker是一种容器技术,与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。
从某种意义上(不太严谨),Docker可以理解成是一种“轻量虚拟机”。相比真正的虚拟机,其有打包体积小、性能消耗低、启动与部署快捷的优点。
Docker的镜像仓库可分为官方仓库、镜像仓库和私有仓库。
Docker官网:https://www.docker.com
Docker官方文档:https://docs.docker.com
Docker官方镜像仓库:https://hub.docker.com
Docker官网对容器技术的介绍:https://www.docker.com/resources/what-container
Docker参考文章:《什么是Docker?看这一篇干货文章就够了!》

1.2 Docker中的对象

在Docker容器中主要有4中对象,分别是image镜像、container容器、network网络,以及volume卷。镜像(image)是一个文件,当它被启动起来后便成为了容器(container),多个容器可以加入到一个网络(network)中,容器内也可挂载不同的卷(volume),卷可以理解为硬盘存储区域。
在Linux下,Docker的操作命令通常为:docker 对象名 命令,例如:dokcer image ls列出当前系统中的所有镜像,一些常用命令中对象名可以省略不写。

二、Linux下Docker的安装

  1. 安装Docker在Linux命令行运行以下命令即可:
# 这里指定的是aliyun镜像仓库
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  1. 然后需要新建配置文件:
# 新建配置文件
vim /etc/docker/daemon.json
  1. 在配置文件中写入以下内容,目的是设置镜像仓库地址,提升镜像拉取速度:
{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://hub-mirror.c.163.com"
  ]
}
  1. 安装完成后启动Docker
# 启动docker
systemctl start docker

# 查看docker版本信息
docker -v

三、image相关命令

1. 拉取镜像
docker pull 镜像名:标签
其中标签可省略,省略标签默认拉取latest版本。(下同)
2. 构建镜像
docker build -t 镜像名 构建路径
例如:docker build -t dockerdemo:latest ./
3. 删除镜像
docker rmi 镜像名或者docker image rm 镜像名
4. 查看所有镜像
docker images或者docker image ls

四、container相关命令

容器的生命周期包括:创建(Created) -> 运行中(Up) -> 已停止(Exited)
1. 从镜像创建容器
docker create 镜像名:标签
创建完成后容器处于created状态,还不是运行中的状态。
2. 查看容器信息
docker ps [参数]
不加参数默认只显示运行中的容器。

  • -a 显示所有容器,包括运行中和已停止的容器信息
  • -q 只输出容器id

3. 查看容器日志
docker logs [-f] 容器名或容器id
-f表示动态查看日志输出。
使用容器名或容器id都可以唯一指代某个容器,在对容器操作时只需要使用其中一种即可(下文简写其中一种)。
容器id是自动生成的,容器名如果不指定也会自动生成。
容器id比较长,只输入前2-3位便可唯一确定一个容器,例如:容器id为8f414d8c4fc3,使用8f便可确定这一容器。
查看该容器的日志的命令:docker logs -f 8f
4. 启动容器
docker start id
用于启动Created状态的容器,或者Exited状态的容器。
5. 重启容器
docker restart id
可以是运行中的容器或者已经停止的容器。
6. 停止运行中的容器
docker stop id
7. 删除容器
docker rm id
不能删除运行中的容器,需要先stop再删除。

docker run命令

该命令属于docker的容器命令,基本格式如下:
docker [container] run [参数] [镜像名]
其中container通常省略不写,该命令相当于合成了pull、create和start三个命令。
常用参数:

  • -d 指定该容器后台运行
  • --rm 设置为一次性容器,在容器关闭时自动删除
  • -it 为容器分配一个TTY终端,且容器启动后进入命令行。
  • -e [...] 设置容器的环境变量,其后更设置的字段
  • -h [...] 指定该容器在网络中的主机名
  • --name [...] 指定该容器名称
  • -p [outer:inner] 端口映射,外部端口写在前
  • -v [outer:inner] 卷映射
  • --restart=always 设置该容器始终跟随docker重启
  • --network=[网络名] 为该容器指定网络
    举例
    安装mysql容器,版本为5.x(使用标签5)
    容器命名为db(- -name=db)
    后台运行(-d)
    将容器的3306端口映射到外部的3307端口(-p 3307:3306)
    将该容器加入到名为mynet的docker网络(- -network=mynet)
    设置该容器在网络中的主机名为maindb(-h maindb)
    设置mysql的root用户的密码为root123(-e MYSQL_ROOT_PASSWORD=root123)
    将外部的/tmp/initdb/目录映射到容器内的/docker-entrypoint-initdb.d目录(-v /tmp/initdb:/docker-entrypoint-initdb.d)
docker run --name=db -d -p 3307:3306 --network=mynet -h maindb -e MYSQL_ROOT_PASSWORD=root123 -v /tmp/initdb:/docker-entrypoint-initdb.d mysql:5

补充

# 进入到容器的终端界面
docker exec -it 容器名 /bin/bash

五、network相关命令

docker可以创建网络环境用于容器之间的相互通信。
1. 创建一个网络
docker network create 网络名
2. 查看所有docker网络
docker network ls
3. 删除一个网络
docker network rm 网络名
4. 将容器加入到一个网络
docker network connect 网络名 容器名
5. 将容器移出一个网络
docker network disconnect 网络名 容器名
6. 查看网络详情
docker network inspect 网络名 容器名

六、构建镜像

以java的jar包为例:

  1. 上传jar包到一个Linux空目录(该目录即为构建目录)
  2. 新建dockerfile文件
# 在该空目录下新建dockerfile
vim dockerfile

在dockerfile中写入以下内容:

# 设置基础镜像
FROM openjdk:8-jre-alpine

# 设置docker内的工作目录 等效于 cd /tmp
WORKDIR /tmp

# 将构建目录下的jar文件拷贝到镜像中,改名为app.jar
ADD *.jar app.jar

# 启动时运行的命令 不支持环境变量展开 specify spring.profiles.active
ENTRYPOINT ["java", "-jar", "/tmp/app.jar"]
  1. 执行构建命令
# 其中-t用于指定镜像名和标签,标签不写默认为latest
docker build -t 镜像名:标签
  1. 运行容器
docker run 容器名:标签

你可能感兴趣的:(Java随笔,docker,linux)