Docker基本使用,我在学习完黑马的docker入门,进行核心使用的进一步提取,本文主要是对于重要步骤的提取,以下内容都是基于Centos 7

1、Douker的安装

1.1 首先先删除系统可能存在的

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

1.2配置Docker的yum仓库

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

1.3安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

1.4启动Docker

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

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

1.5镜像加速

进入阿里云官网,找到容器镜像服务
image-20240130140419268

执行下面命令

# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

2、基本命令(以黑马商城为例)

2.1 拉取镜像

# 第1步,去DockerHub查看nginx镜像仓库及相关信息

# 第2步,拉取Nginx镜像
docker pull nginx

# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
mysql        latest    3218b38490ce   17 months ago   516MB

2.2加载镜像

有时候因为网速问题,大家可以先下载到本地,然后进行加载

比如我们下载的叫做nginx.tar,这里放在根目录

docker load -i nginx.tar

查看是否加载成功

image-20240130142133330

2.3 挂载本地目录和文件

挂载的意思就是你要把本地路径与你容器里的路径双向绑定

  • html是静态资源目录,
  • nginx.conf是nginx的配置文件

-v 命令,冒号前面是宿主机,冒号后面是容器内部(可以再doker官网进行查看)

-v /root/nginx/html:/usr/share/nginx/html \

2.4 网络连接

项目往往需要访问其它各种中间件,例如MySQL

# 1.首先通过命令创建一个网络
docker network create hmall

# 2.然后查看网络
docker network ls
# 结果:
NETWORK ID     NAME      DRIVER    SCOPE
639bc44d0a87   bridge    bridge    local
403f16ec62a2   hmall     bridge    local
0dc0f72a0fbb   host      host      local
cd8d3e8df47b   none      null      local
# 其中,除了hmall以外,其它都是默认的网络

# 3.让dd和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
#注意前提是已经创建了容器可以加入,后面怎么一开始就加入
docker network connect hmall mysql --alias db
# 3.2.db容器,也就是我们的java项目
docker network connect hmall dd

# 4.进入dd容器,尝试利用别名访问db
# 4.1.进入容器
docker exec -it dd bash
#可以执行ping进行测试

2.5构建镜像

文本以黑马的为例子

Dockerfilehm-service/target目录下的hm-service.jar一起上传到虚拟机的root目录:

有时候先构建一个镜像

# 1.构建项目镜像,不指定tag,则默认为latest
docker build -t hmall .

# 2.查看镜像
docker images
# 结果
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
hmall         latest    0bb07b2c34b9   43 seconds ago   362MB
docker-demo   1.0       49743484da68   24 hours ago     327MB
nginx         latest    605c77e624dd   16 months ago    141MB
mysql         latest    3218b38490ce   17 months ago    516MB
  • docker build : 就是构建一个docker镜像

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

  • . : 最后的点是指构建时Dockerfile所在路径,,所以指定的是.代表当前目录,也可以直接指定Dockerfile目录:

    问题1

    有时候大家服务器连接不到docker hub 就要我们手动下载镜像,进行加载到本地

    image-20240130151307186

    再次重新执行编译

    问题2

    注意点:打包jar的时候容易出错

    image-20240130162513816

    这里展示的11,就是你的java要是11版本的,否则会出现问题

2.6删除容器

发现无法删除,因为容器运行中,强制删除容器

docker rm -f nginx

3、部署其他

3.1、Java后端

黑马demo
# 1.创建并运行容器
docker run -d --name dd -p 8090:8090 docker-demo:1.0
# 2.查看容器
dps
# 结果
CONTAINER ID   IMAGE             PORTS                                                  STATUS         NAMES
78a000447b49   docker-demo:1.0   0.0.0.0:8080->8080/tcp, :::8090->8090/tcp              Up 2 seconds   dd
f63cfead8502   mysql             0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   Up 2 hours     mysql

# 3.访问
curl localhost:8080/hello/count
# 结果:
<h5>欢迎访问黑马商城, 这是您第1次访问<h5>

image-20240130152408116

黑马商城
# 3.创建并运行容器,并通过--network将其加入hmall网络,这样才能通过容器名访问mysql
docker run -d --name hmall --network hmall -p 8080:8080 hmall

3.2、前端

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 hmall \
  nginx

3.3 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 \
      --network hmall \
    mysql

4、最终结果

当你上述操作都完成后,docker部署Java项目就没OK了
注意

​ 一定要正确加入同一个网络

​ 一定要对于Nginx配置的api接口与容器的名字一致

​ java后端对应的容器名字mysql也要一致

image-20240130171122392

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐