把jar包和 dockerfile文件放到同一目录下
#构建Docker镜像 注意后面的 . 不能省略 .表示Dockerfile所在的当前目录
docker build -t your-image-name .
#添加镜像版本号
docker build -t your-repository/your-image-name:version-number .
#运行并创建一个容器
docker run -d -p 8080:8080 --name container_name your-image-name
# 停止容器 767fce4cb990 容器ID (容器名也可以)
docker stop 767fce4cb990
docker start 767fce4cb990
docker restart 767fce4cb990
#查看当前运行的容器
docker ps
#查看所有容器
docker ps -a
#删除容器
docker rm container_name
#删除镜像
docker rmi image_name
# 查看 my_container 容器日志 实时打印
docker logs -f my_container
# Linux 上的 Docker 引擎用户也可以通过 docker run 的 --add-host 标志启用主机的默认名称 host.docker.internal。Java可以直接使用 host.docker.internal 主机名来访问宿主机的IP地址
# host.docker.internal 主机名。host-gateway 是Docker网络中宿主机的默认网关地址。
docker run -d -p 8080:8080 --add-host host.docker.internal:host-gateway --name container_name image_name
直接访问docker宿主机的IP,host.docker.internal
主机名。host-gateway
是docker网络中宿主机的默认网关地址。
# 进入到容器内部
docker exec -it container_name /bin/bash
# 或者
docker exec -it container_name /bin/sh
#退出容器
exit
# 获取容器详细信息
docker inspect container_name
# 自启动
docker run -d -p 8080:8080 --name container_name --restart=always your-image-name
#使用docker拉取nginx并命名为 nginx_container 容器
docker run --restart=unless-stopped -p 9709:9709 --name nginx_container \
-v /home/nginx_container/web/html:/usr/share/nginx/html \
-v /home/nginx_container/web/log:/var/log/nginx \
-v /home/nginx_container/web/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx_container/uploadfile:/home/nginx_container/uploadfile \
-d nginx
# 如果在创建容器的时候没有指定--restart参数,可以使用update更新容器
docker update --restart=unless-stopped container-name
--restart=always # 表示容器退出时,docker会总是自动重启这个容器
--restart=on-failure:3 # 表示容器的退出状态码非0(非正常退出),自动重启容器,3是自动重启的次数。超过3此则不重启
--restart=no # 默认值,容器退出时,docker不自动重启容器
--restart=unless-stopped # 表示容器退出时总是重启,但是不考虑docker守护进程运行时就已经停止的容器
docker运行mysql
# 拉取镜像:
docker pull mysql
# 运行镜像 并进行日志和数据库文件映射
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /opt/docker/mysql/data:/var/lib/mysql -v /opt/docker/mysql/log:/var/log --restart always mysql
1.-itd:这是 docker run 命令的参数组合,-i 和-t 是命令中的两个参数,用于在容器与终端之间建立交互式连接;-d:将容器设置为 "detached" 模式,容器在后台运行。
2、--name mysql-test:通过 --name 参数,你为容器指定了一个名称 "mysql-test"。这个名称是你自己定义的容器标识符,用于在后续操作中识别和管理容器。
3、-p 3306:3306:通过 -p 参数,你将主机的 3306 端口映射到容器的 3306 端口。这样,你可以通过主机的 3306 端口访问容器内的 MySQL 服务。例如,通过主机的 IP 地址和 3306 端口,你可以使用 MySQL 客户端连接到容器中的 MySQL 数据库。
4、-e MYSQL_ROOT_PASSWORD=123456:通过 -e 参数,你设置了 MySQL 数据库的 root 用户的密码为 "123456"。这是安全设置,确保数据库具有密码保护。
5、-v:这是要进行挂载的文件 前面的路径是宿主机的目录,后面的是docker容器里面的路径
6、restart always 开机启动
7、mysql:这是要运行的 Docker 镜像的名称。
docker运行redis
# 拉取redis镜像:
docker pull redis
# 创建并运行redis容器
docker run -d --privileged=true --restart always -v /opt/docker/redis/conf/data:/data --name myredis -p 6379:6379 redis --appendonly yes
-d -> 以守护进程的方式启动容器
-p 6379:6379 -> 绑定宿主机端口
--name myredis -> 指定容器名称
--restart always -> 开机启动
--privileged=true -> 提升容器内权限
-v /root/docker/redis/data:/data -> 映射数据目录
--appendonly yes -> 开启数据持久化
docker运行nginx
# 拉取nginx并运行容器 /opt/static/dist 这个路径是我前端打包的静态资源
docker run --restart=unless-stopped -p 80:80 --name my_nginx \
-v /opt/static/dist:/opt/static/dist \
-v /opt/static/log:/var/log/nginx \
-v /opt/static/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/static/nginx/nginx/conf:/etc/nginx/conf.d \
-d nginx
-v /opt/static/nginx/nginx.conf:/etc/nginx/nginx.conf # 这句是映射nginx默认配置文件
-v /opt/static/nginx/nginx/conf:/etc/nginx/conf.d # 这个是一个目录,nginx默认配置目录,会加载这个目录下所有的 *conf文件 ,一般默认有一个 default.conf 文件 :内容结构是 server {}
一般这两个挂载只用一个就行了
docker网卡相关:
# 查看容器的ip地址 container_name 容器名称,通过模板 {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} 来提取容器的 IP 地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name
# 创建一个新的Docker网络 my_custom_network 网卡名称
docker network create my_custom_network
# 查看网卡列表
docker network list
# 运行容器并将其加入到新网络
docker run --network my_custom_network -d --name my_container my_image
# 将创建的网卡附加到容器上
docker network connect my_custom_network container_id