Docker的安装、基础命令与项目部署

文章目录


前言

docker是快速构建、运行、管理应用的工具,本文记录了docker安装、docker基础命令、docker的基本操作以及java项目的部署。


一、docker安装与MySQL部署

主要讲述在Linux环境下docker的安装过程。

1.Linux环境下docker的安装

(1)基于CentOS7

1.切换到root。

java 复制代码
su root

2.卸载旧版本docker。

java 复制代码
yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

3.配置docker的yum库

安装一个yum工具:

java 复制代码
yum install -y yum-utils

安装成功后,执行命令,配置docker的yum源:

java 复制代码
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4.安装docker

java 复制代码
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

5.启动和校验

java 复制代码
# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

(2)基于Ubuntu

1.卸载旧版本

java 复制代码
apt-get remove docker docker-engine docker.io containerd runc

如果出现如下情况,需要添加管理员权限(su root)才可以卸载:

2.更新软件包

java 复制代码
sudo apt update
sudo apt upgrade

3.添加docker依赖库

java 复制代码
apt-get install ca-certificates curl gnupg lsb-release

4.添加docker官方GPG密钥

java 复制代码
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

5.添加docker软件源

java 复制代码
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

6.安装docker

java 复制代码
apt-get install docker-ce docker-ce-cli containerd.io

7.校验

java 复制代码
sudo docker run hello-world

二、docker基础

1.常见命令

Docker最常见得命令就是操作镜像、容器得命令,官方文档:https://docs.docker.com/

(1)快速创建一个mysql容器(MySQL得一键安装)。

java 复制代码
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:是设置环境变量。

镜像名称结构:

Repository:TAG => 镜像名:版本号

(2)docker pull :拉取镜像。

(3)docker images:查看本地镜像。

(4)docker save:保存镜像到本地压缩文件。

(5)docker rmi:删除本地镜像。

(6)docker load:查看容器。

(7)docker run -d --name:创建并运行容器。

(8)docker stop:关闭容器。

(9)docker ps:查看容器。

	 docker ps -a:查看所有容器。

(10)docker start:启动指定容器

(11)docker restart:重新启动指定容器

(12)docker rm:删除指定容器

	docker rm -f:强制删除容器

(13)docker logs:查看容器运行日志

		options:
				-f:跟踪日志输出
				--since:显示某个开始时间的所有日志
				-t:显示时间戳
				--tail:仅列出最新N条容器日志

(14)docker exex:进入容器

2.命名别名

(1)编辑bashrc文件。

java 复制代码
vi /root/.bashrc

(2)添加需要简化的命令。

(3)执行如下命令,使其命令别名生效。

java 复制代码
source /root/.bashrc

3.数据卷

(1)什么是数据卷?

数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据。

(2)如何挂载数据卷?

在创建容器时,利用 -v 数据卷名:容器内目录完成挂载。

容器创建时,如果发现挂载的数据卷不存在时,会自动创建。

(3)数据卷的常见命令有哪些?

docker volume ls:查看数据卷

docker volume rm:删除数据卷

docker volume inspect:查看数据卷详情

docker volume prune:删除未使用的数据卷

(4)演示--MySQL的匿名数据卷

1.查看MySQL容器详细信息

java 复制代码
docker inspect mysql

重点关注如下部分:

2.查看该目录下的MySQL的data文件

java 复制代码
ls -l /var/lib/docker/volumes/55800fa091f23d27e2e45c2b68fd57f1570b264ec047c61a24f257359f2b6f72/_data

(5)挂载本地目录或文件

由于数据卷的目录结构较深,为了操作简便,我们可以直接将容器目录与宿主机指定目录挂载。

1.挂载语法

java 复制代码
# 挂载本地目录
-v 本地目录:容器内目录
# 挂载本地文件
-v 本地文件:容器内文件

注意:本地目录或文件必须以/或./开头。

2.演示

(1)将本地文件上传至虚拟机/root目录下:

(2)删除mysql容器,并进入到~。

java 复制代码
# 删除mysql容器
docker rm -f mysql
# 切换至~
cd ~

(3)创建并运行mysql容器,挂载本地目录

java 复制代码
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

(4)查看root目录,可以发现~/mysql/data目录已经自己创建好了

java 复制代码
ls -l mysql

(5)进入MySQL

java 复制代码
docker exec -it mysql mysql -uroot -p123

4.镜像

部署如下demo项目以及对应的Dockerfile:

(1)将准备好的上述两个文件上传到虚拟机的/root/demo下。

(2)在当前目录下构建一个名为docker-demo的容器。

java 复制代码
docker build -t docker-demo:1.0 .

(3)查看镜像列表。

java 复制代码
docker images

(4)运行该镜像。

java 复制代码
# 1.创建并运行容器
docker run -d --name dd -p 8080:8080 docker-demo:1.0
# 2.查看容器
docker ps -a
# 3.访问(访问的是之前已经部署好的项目docker-demo)
curl localhost:8080/hello/count

5.网络

(1)基础命令

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

(2)实现在同一个自定义网络中,不使用ip地址,通过别名互相访问。

1.确保需要加入同一网络的容器的status在up状态。

2.创建一个自定义网络。

# 创建网络
docker network create yeam
# 查看所有网络
docker network ls

3.将容器加入自定义网络。

# 将mysql容器加入自定义网络
docker network connect yeam mysql
# 将dd容器加入自定义网络
docker network connect yeam dd
# 也可以在创建容器的时候直接加入网络(但是创建时指定容器,就不会加入默认网桥)
# docker run -d --name dd -p 8080:8080 --network yeam docker-demo:1.0


4.检验网络是否互通。

不使用ip,使用容器名也可以访问。

三、项目部署

在此以黑马商城的项目为例,进行部署。

1.数据库

(1)将mysql文件夹上传至虚拟机的root/下。

(2)创建mysql容器。

bash 复制代码
# 删除原来的mysql容器
docker rm -f 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
 # 查看root目录,发现./mysql/data目录以及自己创建好了
 ls -l mysql
 # 进入mysql容器,查看数据库是否初始化完成
 docker exec -it mysql mysql -uroot -p123

2.后端

(1)使用idea将打包好的jar包和Dockerfile文件上传至/root目录下。

(2)创建项目的镜像。

bash 复制代码
docker build -t hmall .

(3)检查

通过浏览器可以访问:http://虚拟机ip:18080/search/list

3.前端

(1)前端代码基于nginx进行部署,将准备好的nginx部署目录上传至虚拟机。

(2)nginx同时代理项目中的两个端口。

18080:对应hmall-portal

18081:对应hmall-admin

bash 复制代码
docker run -d \
  --name nginx \
  -p 18080:18080 \
  -p 18081:18081 \
  -v /root/nginx/html:/usr/share/nginx/html \
  -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
  --network yeam \
  nginx

注意:这里的yeam为上面的自定义网络。

4.测试

使用http://虚拟机ip端口:18080/http://虚拟机ip端口:18081/进行访问。


相关推荐
南猿北者7 小时前
docker容器
docker·容器
二十雨辰7 小时前
[linux]docker基础
linux·运维·docker
time never ceases7 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle
YCyjs8 小时前
K8S群集调度二
云原生·容器·kubernetes
Hoxy.R8 小时前
K8s小白入门
云原生·容器·kubernetes
MonkeyKing_sunyuhua9 小时前
ubuntu22.04 docker-compose安装postgresql数据库
数据库·docker·postgresql
追风林10 小时前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
€☞扫地僧☜€11 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
茶馆大橘11 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
全能全知者12 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器