Docker学习

1、配置Docker

2、配置Docker镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://zlcqqwo7.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3、Docker部署

docker原理:下载免安装的文件有可执行文件(镜像只有一个,下载了就不会下了)

docker对环境没要求类似java虚拟机(宝塔原来get)

docker内的容器之前相互隔离,容器内可以是同一端口,但一旦出了容器到达宿主机,那么就不能共享端口

4、命令解读

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:指定运行的镜像名(镜像名:版本号)

5、常见命令

pull        镜像仓库拉取
image镜像查看
rmi        镜像删除
build自己构建镜像
save保存到本地压缩
load压缩文件加载到他的镜像
push把镜像推上镜像仓库,后同时用pull从镜像仓库拉出
run运行并创建进程
stop停止容器中的进程(容器依然在,下次运行不用重复启动)
start启动已经停止的进程
ps查询容器状态
rm删除镜像
logs打印相关日志
exec进入容器(修改之类)

命令的别名 root/.bashrc

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

修改完后还没完,要写sourse ~/.bashrc    让该文件生效


6、Docker基础-数据卷挂载(容器内目录和宿主机目录的桥梁)

docker只具备了容器运行必备的东西(数据卷解决这个)

创建数据卷html文件夹(用docker命令创建)之后帮助你在宿主机创建对应真实的目录

/var/lib/docker/volumes/html/_data

创建数据卷conf文件夹(用docker命令创建)之后帮助你在宿主机创建对应真实的目录

/var/lib/docker/volumes/conf/_data   间接产生了关联

之后docker会让两者产生双向绑定 宿主机有高级编辑器操作方便。

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 数据卷:容器内目录 可以完成数据卷的挂载。

Unable to find image 'nginx:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: TLS handshake timeout.

无法下载镜像:超时

转载:docker拉取镜像时报错:docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: dial tcp:-CSDN博客

以上都未能结局我的问题

我的问题是通过宝塔删除容器、并且在目录删除了文件

解决:没有删掉对应的存储卷、存储卷不因容器的删除而删除,而是在下一次创建相同容器是自动挂载,所以要对原有的存储卷进行删除、注意宝塔的是有存储卷

本地目录挂载

mysql容器的数据挂载

需求:查看mysql容器、判断是否有数据卷挂载

           基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(查阅官方镜像文档)

mysql是自动创建数据数据卷的(数据迁移问题)

自动创建的卷名字不好(匿名卷)自己挂载,挂载到任意不深的目录

-v 本地目录(原本是镜像名):容器内目录 本地挂载
不要用相对目录(本地目录必须以"/"或者"./"开头)

-v mysql:/var/lib/mysql # 会被识别为一个数据卷叫mysql,运行时会自动创建这个数据卷 -v ./mysql:/var/lib/mysql # 会被识别为当前目录下的mysql目录,运行时如果不存在会创建目录

  • 挂载/root/mysql/data到容器内的/var/lib/mysql目录

  • 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录(初始化的SQL脚本目录)

  • 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录(这个是MySQL配置文件目录)

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 \
  mysql

6、自制镜像

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

镜像是分层的

我们不需要亲自去完成我们只需要指出-入口是什么、中间有那些层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

# 指定基础镜像
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"]

 已经有人将jdk、基础镜像、都已经做了所以

# 基础镜像
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 -t myImage:1.0 .

  • docker build : 就是构建一个docker镜像

  • -t docker-demo:1.0-t参数是指定镜像的名称(repositorytag

  • . : 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.代表当前目录,也可以直接指定Dockerfile目录:

构建jdk镜像将文件放在root下

docker load -i jdk.tar

# 进入镜像目录
cd /root/demo
# 开始构建
docker build -t docker-demo:1.0 .

7、Docker网络容器互联

docker会自动创建ip地址

如果重新启动Docker ip会便所以要进行自定义网络(锁死)

自定义创建一个网桥 然后网球之间的镜像互相访问,可以通过容器名访问!

命令

说明

文档地址

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

docker run -d --name dd -p 8080:8080  --network heima docker-demo
#创建镜像时自动加入网桥 就不会加入默认网桥

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值