【Docker】docker 笔记,mysql,nginx部署

docker 运行 mysql

docker run创建运行一个容器,-d 让容器在后台运行

--name : 容器的名字

-p :端口映射,将Linux 的端口与 Docker 容器的端口进行映射。Docker 镜像有隔离的性质,有独立的网络环境,外部无法直接连接 Docker 镜像,要 LinuxDocker 进行映射后才可以访问。第一个参数是 Linux 的端口,第二个参数是 Docker 的地址。

-e :容器的环境变量,由容器的发布者设定。

最后一行 mysql 是运行的镜像的名字

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

SQLyog 2058错误

允许 root ,其他连接用密码登录

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123';

FLUSH PRIVILEGES;

进入一个docker 容器

查看所有的docker 容器

docker ps

进入一个docker 目录

其中 mysql 是容器的名字(docker ps 中name 对应),这个位置除了用 name ,还可以用容器的编号 (docker ps 中 CONTAINER ID 对应)

docker exec -it mysql /bin/bash
docker exec -it mysql bash

输入 exit 可退出当前环境,退入原生 Linux 环境。

Docker 常见命令

Docker images :查看所有本地的镜像

Docker rmi :删除本地镜像

  • 如果有镜像已经在运行需要先删除,使用 Dokcer ps 查询,使用 Docker rm 删除,之后再用 Docker rmi 删除本地的镜像。

Docker start :开启容器。

Docker stop :停止容器。

Docker ps :查看运行的容器进程。

  • Docker ps -a:停止的容器也会包含在内

Docker logs:容器运行的日志。

Docker exec:进入容器。

  • -it :以可输入终端的方式打开
  • bash :命令行

image-20240330161841148

docker load -i jdk.tar

更多命令,再官网查看。

Reference documentation | Docker Docs

Docker 运行 Nginx

Docker Hub Container Image Library | App Containerization

Docker Hub 中找到 Nginx

docker pull nginx
docker run -d \
--name nginx \
-p 80:80 \
nginx

Docker ps 格式化显示。

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" -a

Docker 数据卷 (Volume)

Docker 容器是一个镜像运行的最小环境,也就是说很多文件操作,vim 命令都没有实现。

数据卷就是一个解决此问题的一个技术。

image-20240330164307508

image-20240330165104250

查看 volume 相关命令。

docker volume --help

注意:只有在 docker run 执行时,带上 -v 数据卷:内容的目录 参数才能实现挂载,如果容器已经创造是无法再进行挂载的!

在创建 Nginx 时,挂载 html静态目录

Dockerhtml 目录位置为 /usr/share/nginx/html

删除之前创建的 nginx 容器。

docker rm -f nginx

创建新的 nginx

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

image-20240330170345661

docker volume ls
docker volume inspect html

image-20240330170531787

由于使用空间的问题,有些数据会自动挂载在宿主机,形成匿名卷

在删除镜像时,这些存在宿主机的数据,数据卷映射会被删除,但是文件并不会删除,就会形成数据的冗余。

指定本地目录挂载数据卷

-v 本地目录:内容的目录

  • 本地目录必须以 / ,或者 ./ 开头,不加这些会被识别成数据卷,挂载在之前的提到的那个固定位置。

image-20240330175738288

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

自定义镜像

Linux 中部署 java应用的步骤

  1. 准备 Linux 服务器
  2. 按照 JRE 并配置环境
  3. 拷贝 jar
  4. 运行 jar

使用 Dockerfile 来构建自己的镜像

image-20240331130657713

详细文档:Dockerfile reference | Docker Docs

ubuntu 开始制作镜像

# 指定基础镜像
FROM ubuntu:20.04
# 配置环境变量,JDK安装,容器内时区
ENE JAVA_DIR=/usr/local
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装 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
# 入口, java项目启动项
ENTRYPOINT ["java","-jar","/app.js"']

上面做的步骤,变化的只有指定 jar 包,其实 java 环境也有人已经做好了,我们只用做导入 jar 包就行了

jdk 开始做镜像

写成 dockerfile 文件

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
# 拷贝 jar 包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java","-jar","/app.js"]

运行

. :最后的 . 是指定 Dokcerfile 所在的目录在当前的目录下

docker build -t myImage:1.0 .

image-20240331131932873

运行镜像

docker run -d --name dd -p 8080:8080 docker-demo

Docker 网络

把不同的容器放入同一个网络中

image-20240331133214705

docker network name0

# 在创建容器时指定网络
docker run -d --name dd -p 8080:8080  --network name0 docker-demo
# 创建容器后,加入网络
docker network connect name0 dd

Ubuntu 防火墙

安装防火墙工具

sudo apt-get install ufw

开启,重启,关闭

sudo ufw enable
sudo ufw reload  
sudo ufw disable  

查看状态

sudo ufw status

开放端口,关闭端口

sudo ufw allow 22
sudo ufw delete allow 22
posted @ 2024-03-30 15:53  Hoppz  阅读(30)  评论(0编辑  收藏  举报