docker使用的基本知识

简单入门

通过docker部署mysql

1
2
3
4
5
6
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
  • docker run : 创建并运行一个容器,-d是让容器在后台运行
  • –name mysql : 给容器起个名字,必须唯一
  • -p 3306:3306 : 设置端口映射 宿主端口:容器端口
  • -e KEY=VALUE : 设置环境变量
  • mysql : 镜像名 [repository]:[tag] 镜像名:镜像版本 不填默认latest

基础命令

常见命令

  • docker pull 获取镜像
  • docker build 自定义镜像 需要 dockerfile文件
  • docker save 保存docker镜像
  • docker load 加载本地镜像
  • docker push 上传镜像到仓库
  • docker stop/start 开启/关闭容器进程
  • docker ps 查看容器
  • docker rm/rmi 删除容器/镜像
  • docker logs 查看日志
  • docker exec 进入容器

通过部署nginx联系

拉取nginx:

1
docker pull nginx

查看本地镜像:

1
docker images

保存镜像:

1
2
docker save -o nginx.tar nginx:latest
// -o 保存名 镜像名:版本

删除镜像:

1
docker rmi nginx:latest

加载镜像:

1
docker load -i nginx.tar

启动nginx:

1
docker run -d --name nginx -p 80:80 nginx

查看容器状态:

1
docker ps

启动一个新容器:

1
docker run -d --name nginx -p 80:80 nginx

停止容器:

1
2
docker stop nginx
//docker stop {NAMES或者ID}

启动一个旧容器容器:

1
2
docker start nginx
//docker start {NAMES或者ID}

查看日志:

1
2
docker logs nginx
// -f 持续查看日志

进入容器内部:

1
docker exec -it nginx bash

部分可选配置

设置命令别名修改~/.bashrc文件

1
2
alias dps = 'docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Names}}"'
alias dis = 'docker images'

Docker数据卷

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

命令说明文档地址
docker volume create创建数据卷docker_volume_create
docker volume ls查看所有数据卷docker_volume_ls
docker volume rm删除指定数据卷docker_volume_rm
docker volume inspect查看某个数据卷的详情docker_volume_inspect
docker volume prune清楚数据卷docker_volume_prune

简单使用

1
2
//创建挂载数据卷的nginx
docker run -d --name -p 80:80 -v html:/usr/share/nginx/html nginx

查询数据卷:

1
docker volume ls

查看详细数据:

1
docker volume inspect html

本地挂载

  • -v 本地目录:容器内目录

Dockerfile

Dockerfile基础命令

指令说明示例
FROM指定基础镜像FROM centos:6
ENV设置环境变量,可在后面指令使用ENV key value
COPY拷贝本地文件到镜像的指定目录CPOY ./jrell.tar.gz /tmp
RUN执行Linux的shell命令,一般是安装过程的命令RUN tar -zxvf /tmp/jrell.tar.gz&& EXPORTS path=/tmp/jrell:$path
EXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080
ENTRYPOINT镜像中运用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar

使用基础镜像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
ENV TZ=Asia/Shanghai
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 设定时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安装JDK
RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 指定项目监听的端口
EXPOSE 8080
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

使用别人打包好的镜像:

1
2
3
4
5
6
7
8
9
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

docker build命令使用

当编写好Dockerfile,可以使用docker build来进行打包

1
docker build -t myImage:10 .
  • -t:是给镜像起名,格式为repository:tag的格式,不指定tag时,默认为latest
  • . : 是指定Dockerfile所在的目录,如果就在当前目录,则指定为“.

Docker 网络

默认情况下,所有容器都是以bridge方式连接到docker的一个虚拟网桥(docker0; 172.17.0.1/16)上 加入自定义网络的容器才可以通过容器名相互访问。

命令说明文档地址
docker network create创建一个网络docker newwork create
docker network ls查看所有网络docker network ls
docker network rm删除指定网络docker network rm
docker network pruune清除未使用的网络docker network pruune
docker network connect是指定容器加入某网络docker network connect
docker network disconnect是指定容器连接离开网络docker network disconnect
docker newtwork inspect查看网络详细信息docker network inspect

创建一个网络:

1
docker network create 名字

链接一个网络:

1
docker network connect 网络名字 容器名字

创建时链接一个网络:

1
docker run -d --name 名字 -p 外部duank:内部端口 --network 网络名 镜像名