Featured image of post Docker容器快速入门

Docker容器快速入门

Docker容器快速入门

1.安装Docker

一篇文章完成Centos7安装docker-CSDN博客

Docker的安装_docker安装-CSDN博客

注意由于目前监管下架了dockerhub镜像,我们需要配置自己的镜像才能正常使用docker

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
临时使用docker pull docker.unsee.tech/istio/distroless

长期有效
修改文件 vim /etc/docker/daemon.json
如果不存在则需要创建创建注意不要写入中文要带https://),并重启服务,最好只写一条就行
太多了在重启docker时容易报错
[root@centos8 docker]# cat daemon.json
{
  "registry-mirrors":["https://docker.unsee.tech"]
}
sudo systemctl restart docker.service
ping -c 3 docker.unsee.tech

1.1.查看本地yum镜像源地址

1
2
3
4
5
6
cd /etc/yum.repos.d
ll

###没用文件执行以下命令
mkdir /etc/yum.repos.d
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

1.2.设置docker镜像仓库

1
2
3
4
5
yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)

1.3.安装Docker

1
2
3
4
docker --version    查看版本
systemctl start docker     /  systemctl start docker.service
sudo systemctl status docker.service
docker images       查看镜像

1.4.阿里云配置镜像加速

登录阿里云,找到产品—容器—容器镜像服务

没开通可以先开通(免费的)选择镜像工具,选择镜像加速器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
只需要复制以上内容在centos上安装即可

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

2.Docker使用—部署Mysql数据库

部署Mysql,前提条件,停掉虚拟机中的Mysql服务,确保网络正常

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
启动docker后直接执行以下命令

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

可以多次运行此条命令只需要将名字和端口更改就能实现mysql集群效果
docker ps   查看是否启动成功
docker inspect mysql 查看mysql容器

直接使用navicat链接数据库

1
2
ip地址为Linux虚拟机IP
账号密码为root:123

http://hub.docker.com/ docker镜像仓库地址

2.1.命令解读

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

docker run:创建并运行一个容器-d是让容器在后台运行
--name给名字起名字必须唯一
-p端口映射 -p 3306:3306 前面是宿主机端口后面是容器端口
-eKey=Value 是设置环境变量
mysql指定运行镜像名字镜像命名规范由镜像名和版本组成默认版本为latest代表最新版

3.Docker基础

3.1.Docker常见命令

https://docs.docker.com/ 官方文档

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
docker pull xxx      //拉去镜像
docker images        //查看本地所有镜像
docker rmi xxx       //删除镜像
docker push          //推送镜像(共享传递)
docker run           //创建并运行容器
docker stop         //停止容器
docker start        //启动容器(启动进程,并不会创建新容器)
docker ps           //查看容器运行状态
docker rm           //删除容器
docker logs         //查看docker运行日志
docker exec         //进入容器内部

3.1.1.案例:拉取Nginx镜像,创建并运行Nginx容器

1
2
3
4
5
docker pull nginx               //拉取镜像
docker images                   //查看本地所有镜像
docker sava -o nginx.tar nginx:latest       //保存镜像
docker rmi nginx:latest 					//删除刚刚拉取的镜像
docker load -i nginx.tar                    //导入nginx镜像

1
2
3
4
5
6
7
8
docker run -d --name nginx -p 80:80 nginx         运行nginx容器
docker ps  -a  //-a查看所有容器 默认查看运行中容器
# 也可以加格式化方式访问格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
docker stop nginx
docker logs nginx        //查看nginx日志
docker exec -it nginx bash      //进入容器内部使用命令行交互
docker rm nginx         //删除容器,先停止才能删除或者使用-f强制删除

3.2.Docker数据卷

3.2.1.利用Nginx容器部署静态资源并修改资源

1
2
3
4
5
6
docker run -d --name nginx -p 80:80 nginx
docker exec -it nginx bash        //进入容器内部
cd /usr/share/nginx/html          
vi index.html         //command not found

docker容器内只会部署最基础的命令vi等命令不会添加需要利用数据卷来解决

3.2.2.数据卷

数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。

1
2
3
4
5
docker rm -f nginx      使用数据卷挂载时需要先删除已有的nginx
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx 
-v参数表示启动时挂载数据卷 -v数据卷名:需要挂载的路径
docker volume inspect html        //查看数据卷详情,查看映射过来的宿主机目录
cd /var/lib/docker/volumes/html/_data

3.2.3.mysql容器的数据挂载

1
2
3
4
5
6
7
8
9
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

现在root目录下创建mysql文件夹,在mysql文件夹下创建3个文件夹,用于本地存储mysql数据

文件夹下存放数据

3.3.Docker自定义镜像

镜像是分层的,对每一层压缩打包就能部署好

3.3.1.DockerFile语法

1
2
3
4
5
6
编写好Dockerfile后可以利用以下语法构建镜像
docker build -t myImage:1.0 .

-t是给镜像起名格式依然是repository:tag的格式不指定tag时默认为latest

.:是指定Dockerfile所在目录如果就在当前目录则指定为"."

3.3.2.案例—自定义镜像

1
2
3
4
5
6
7
8
9
# 基础镜像
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"]

将写好的dockerfile和生成的jar包打包好

导入openjdk:11.0-jre

1
docker load -i  jdk.tar

1
docker build -t docker-demo .

1
docker run -d --name dd -p 8080:8080 docker-demo       运行镜像

成功访问

3.4.Docker网络

加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下

3.4.1.自定义网络

1
2
docker network create heima        自定义一个名为黑马的网卡
docker network ls                  查看docker所有网卡

1
2
docker network connect heima mysql    //将mysql添加一张heima网卡,容器存在连接
docker inspect mysql        //查看mysql网卡信息

1
2
docker run -d --name dd -p 8080:8080 --network heima docker-demo
容器启动时添加并绑定网卡信息

4.部署Java项目

4.1.部署后端

4.2.部署前端

1
2
3
4
5
6
7
8
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 heima \
  nginx

5.DockerCompose

使用Docker部署需要部署前端后端数据库还需要配置在统一网络下,非常麻烦和不方便

Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall

1
docker compose up -d        //构建时注意路径

1
docker compose down
By Lsec
最后更新于 Sep 26, 2025 23:42 +0800
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计
¹鵵ҳ