docker 基础

Docker

1 安装

卸载原有的docker

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

image-20231216172949339

设置仓库链接

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

image-20231216212558118

安装Docker

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

image-20231216212747270

启动Dcoker

sudo systemctl enable docker
sudo systemctl start docker

image-20231216213002066

测试

sudo docker run hello-world

image-20231216213229259

2 镜像加速

image-20231216213508016

image-20231216213554735

image-20231216213827969

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

3 Docker命令

3.1 帮助文档

# 查看所有指令
docker --help

# 查看具体某个指令,例如ps
docker ps --help

image-20231216215130183

image-20231216215147884

3.2 镜像和容器

3.2.1 搜索镜像

Docker-Hub搜索镜像

镜像地址:https://hub.docker.com/

image-20231216215717628

image-20231216215742749

3.2.2 下载镜像

[ ] :代表可写可不写,如果不写,默认是从docker-hub上拉取

image-20231216220100836

image-20231216220523284

image-20231216221027716

3.2.3 列出镜像信息

image-20231216220937186

image-20231216223021987

# 列出所有镜像的的镜像id
docker images -a -q 或者 docker images -aq
# 列出所有镜像名为mysql的镜像id
docker images -aq --filter=reference=mysql

image-20231216223640959

3.2.4 列出容器信息

image-20231216224714424

image-20231216224114936

image-20231216224803595

3.2.5 创建并运行容器

image-20231216225125797

image-20231216231301646

如果没有输入COMMAND则会默认运行的命令

image-20231216230242188

image-20231216230503601

默认运行方式

image-20231216225634886

image-20231216225707827

后台运行

image-20231216225904051

image-20231216231214571

3.2.6 删除容器

image-20231217103615279

image-20231217103151530

image-20231217104045539

image-20231217104142337

3.2.7 进入容器执行命令

image-20231217105357785

docker exec -it a0937 bash
curl http://127.0.0.1

image-20231217104940371

image-20231217105617418

image-20231217105709862

3.2.8 查看容器日志

image-20231217111517552

image-20231217111059652

持续显示新的日志

image-20231217111245621

image-20231217111321509

docker logs -n 20 a093

image-20231217111653410

3.2.9 容器文件拷贝

image-20231217122007942

宿主机拷贝到容器中

docker cp /home/cp_test a093:/home/cp_test

image-20231217112923624

容器拷贝到宿主机中

docker cp a093:/usr/share/nginx/html/index.html /home/index.html

image-20231217122250188

image-20231217122336235

3.2.10 停止/运行容器

image-20231217122637502

docker stop  xxx
docker start xxx

image-20231217122745637

3.3 run命令

3.3.1 重点学习

run命令是最重要的命令,我们要学会其常用选项才能看懂真正生产中有的命令。

3.3.2 常用选项

-p 端口映射

-p 端口对外发布(端口映射)

image-20231217153022031

image-20231217151525622

我们如何知道需要发布容器的哪些端口

方式一

image-20231217152417614

方式二

image-20231217152458129

image-20231217152517609

image-20231217153114906

image-20231217155654966

-v 数据卷

image-20231217172134827

容器中哪些位置需要挂载数据卷

方式一

image-20231217170419929

方式二

nginx的dockerfile中不知道为什么没有volume

image-20231217153953641

image-20231217154022289

结构图

image-20231217171947704

image-20231217155953100

image-20231217172215587

docker run -d -p 81:80 -v /home/index.html:/usr/share/nginx/html/index.html nginx

image-20231217172437862

image-20231217172459597

-e 设置环境变量

image-20231217174526434

如何知道需要设置什么环境变量

image-20231217173356963

docker run -d -p 3307:3306 -v /home/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=fp mysql:5.7

image-20231217174752388

image-20231217174912752

如果在mysql中,新建一个test数据库,然后删除mysql 容器。重新再次运行刚才命令,重新连接mysql,发现test数据库依然存在,因为-v数据卷进行了持久化操作

--name 容器命名

image-20231217180008157

docker run -d --name nginx-test -p 82:80 -v /home/index.html:/usr/share/nginx/html/index.html nginx

image-20231217180041479

image-20231217180102880

--restart 重启策略

image-20231217181711612

docker update --restart=always nginx-test

image-20231217181604242

image-20231217181803793

docker run --restart always -d --name nginx-test -p 82:80 -v /home/index.html:/usr/share/nginx/html/index.html nginx

3.4 其他镜像和容器命令

3.4.1 镜像详细信息

image-20231220214154509

docker images
docker image inspect 605c

image-20231220214255431

docker top 40ba
docker inspect 40ba

image-20231220214853412

3.5 数据卷

3.5.1 作用

image-20231220215238993

3.5.2 相关操作

设置数据卷

image-20231220220229917

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

image-20231220220410946

image-20231220220501470

image-20231220220625705

image-20231220220715302

列出、查看、创建、删除

image-20231220222121981

image-20231220222347120

image-20231220222936920

image-20231220223037765

4 项目部署案例

4.1 项目介绍

image-20231220223747061

4.2 部署

4.2.1 mysql

image-20231220230759572

docker run -d  -v mysql_data:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=fp --restart always --name blog_mysql  mysql:5.7 

image-20231220231022936

连接成功

image-20231220231132206

4.2.2 redis

image-20231221204407395

image-20231221204856081

docker run -d  -v redis_data:/data -p 6379:6379 --restart always --name blog_redis redis:7.0 redis-server --appendonly yes 

image-20231221212138859

image-20231221212540082

4.2.3 后端应用

image-20231221213611584

image-20231221215228566

这个地方有些问题,需要学习网络后,在解决

学习网络后

image-20231221224622479

image-20231221224904781

image-20231221225031208

4.2.4 前端应用

image-20231221230245551

5 网络(网桥)

5.1 使用原因

image-20231221221109122

image-20231221221201351

image-20231221221250204

apt-get update
apt install iputils-ping

image-20231221221411152

image-20231221221502332

image-20231221221555325

5.2 相关操作

image-20231221222356462

docker network create blog_net
docker network ls
docker network connect blog_net blog_mysql 
docker network inspect blog_net 
docker network rm nettest

image-20231221223158021

image-20231221223351607

image-20231221223458673

image-20231221223553164

image-20231221223715812

6 DockerFile

6.1 概述

为什么要学习

image-20231221231218716

镜像分层

image-20231221231127538

image-20231221231320289

6.2 基本语法

image-20231222222524214

6.3 快速入门

image-20231222223811351

image-20231222224113721

FROM centos:7
CMD ["echo","helloworld"]

image-20231222224038374

docker build -t hello:1.0 -f HelloWorld .   # .代表当前目录下

image-20231222224914646

6.4 指令学习

6.4.1 常用指令

FROM

image-20231222225832499

CMD

image-20231222230541736

image-20231222230648586

image-20231222230322207

image-20231222230757483

ENV

image-20231224113104578

image-20231224113739103

FROM centos:7
ENV CONTENT="helloworld"
CMD echo $CONTENT

image-20231224114420802

image-20231224114907253

 docker run -e CONTENT="JAVA" test01:2

image-20231224115024359

WORKDIR

image-20231224121334883

image-20231224121854234

测试

image-20231224121917536

RUN

image-20231224122215700

image-20231224152737342

image-20231224152927149

FROM centos:7
ENV CONTENT="hellodcoker"
WORKDIR /app/fp
RUN echo $CONTENT > content.txt #容器构建的时候,执行的命令
CMD ["cat","content.txt"]

image-20231224151737203

image-20231224153206779

ADD

image-20231224222528049

image-20231224221917460

image-20231224221510563

Test03

FROM nginx:1.21.5
WORKDIR /app
ADD sg-blog-vue.tar.gz .  # 最后的 . 代表放到当前的目录下
# RUN tar -zxvf sg-blog-vue.tar.gz   ADD会将压缩包自动解压
RUN cp -r sg-blog-vue/dist/* /usr/share/nginx/html
CMD ["nginx","-g","daemon off;"] #nginx在前台开启一个进程,可以访问

image-20231224221754381

image-20231224222355228

image-20231224222740380

FROM nginx:1.21.5
WORKDIR /app
ADD https://sg-blog-oss.oss-cn-beijing.aliyuncs.com/exampledir/sg-blog-vue.tar.gz .  # 最后的 . 代表放到当前的目录下
RUN tar -zxvf sg-blog-vue.tar.gz  # 网络上的压缩包,ADD不会将压缩包自动解压
RUN cp -r sg-blog-vue/dist/* /usr/share/nginx/html
CMD ["nginx","-g","daemon off;"] #nginx在前台开启一个进程,可以访问

image-20231224222935170

EXPOSE

image-20231224223349346

FROM nginx:1.21.5
WORKDIR /app
ADD https://sg-blog-oss.oss-cn-beijing.aliyuncs.com/exampledir/sg-blog-vue.tar.gz .  # 最后的 . 代表放到当前的目录下
RUN tar -zxvf sg-blog-vue.tar.gz  # 网络上的压缩包,ADD不会将压缩包自动解压
RUN cp -r sg-blog-vue/dist/* /usr/share/nginx/html
EXPOSE 80
CMD ["nginx","-g","daemon off;"] #nginx在前台开启一个进程,可以访问

image-20231224223621657

image-20231224223659325

COPY

image-20231224223841061

image-20231224223917505

image-20231224224207167

image-20231224224521299

image-20231224224544260

ENTRYPOINT

image-20231224224940092

image-20231224225518964

image-20231224230243550

image-20231224230124731

7 项目部署

7.1 后端部署

image-20231225211935340

image-20231225214044452

fp_blog_dockerfile

FROM java:openjdk-8u111
#指定工作目录
WORKDIR /app
#添加jar包到镜像中
ADD sangeng-blog-1.0-SNAPSHOT.jar .
#声明开放端口
EXPOSE 7777
#指定容器运行命令
CMD ["java","-jar","sangeng-blog-1.0-SNAPSHOT.jar","--spring.datasource.url=jdbc:mysql://blog_mysql:3306/sg_blog?
useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai","--spring.datasource.username=root","--spring.datasource.password=fp","--spring.redis.host=blog_redis"]

image-20231225225203636

构建容器

docker build -t fp_blog:01 -f fp_blog_dockerfile . 

image-20231225214609764

 docker run -d -p 7777:7777 --network blog_net  --restart always --name fp_blog fp_blog:01
curl --location --request POST 'http://localhost:7777/login' --header 'Content-Type:application/json' --data '{"userName":"sg","password":"1234"}'

image-20231225225252400

7.2 前端部署

image-20231225231611528

FROM nginx:1.21.5
WORKDIR /app
COPY sg-blog-vue .  #复制的sg-blog-vue文件夹,所以只会有一个dist目录
RUN cp -r dist/* /usr/share/nginx/html 
EXPOSE 80
CMD ["nginx","-g","daemon off;"] #nginx在前台开启一个进程,可以访问

image-20231225230703607

docker build -t fp_blog_vue:01 -f fp_blog_vue_dockerfile .

image-20231225231643120

docker run -d -p 80:80 --restart always --name fp_blog_vue fp_blog_vue:01

image-20231225231718664

image-20231226213733549

重新构建容器运行

访问

image-20231226220945431

8 推送镜像到镜像仓库

image-20231226223226670

image-20231226223246390

image-20231226223736268

docker build -t fengpengfpfp/fp_blog:01 -f fp_blog_dockerfile .
docker tag fengpengfpfp/fp_blog:01 fengpengfpfp/fp_blog:01
docker push fengpengfpfp/fp_blog:01

image-20231226223855057

image-20231226224023852

9 DockerCompose

9.1 概述

image-20231226224543368

image-20231226224617719

9.2 快速入门

image-20231226232924111

image-20231226225846291

image-20231226232527199

image-20231226232421785

services:
  test: #代表服务
    image: nginx #代表镜像
docker compose up -d

image-20231226232609302

image-20231226232801569

docker compose down

image-20231226233054673

9.3 元素

image-20231227212226807

9.4 案例

image-20231227220843348

docker-compose.yaml

services:
  #mysql
  blog_mysql:
    image: mysql:5.7
    #数据卷
    volumes: 
      - mysql_data:/var/lib/mysql
    ports:
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    restart: always
    networks:
      - blog_net
  #redis
  blog_redis:
    image: redis:7.0
    volumes:
      - redis_data:/data
    ports:
      - 6379:6379
    restart: always
    command: ['redis-server','--appendonly','yes']
    networks:
      - blog_net
  #后端服务
  fp_blog:
    image: fp_blog:01
    ports:
      - 7777:7777
    networks:
      - blog_net
    restart: always
  #前端服务
  fp_blog_vue:
    image: fp_blog_vue:01
    ports:
      - 80:80
    restart: always

#指定上方使用的网络
networks:
  blog_net:
#指定上方使用的数据卷
volumes:
  mysql_data:
  redis_data:

image-20231227221320761

image-20231227221454347

image-20231227221558063

image-20231227221636408

因为数据卷不是我们之前定义的数据卷,所以数据卷对应的数据库中就没有之前的数据,因此查询失败

image-20231227223210323

services:
  #mysql
  blog_mysql:
    image: mysql:5.7
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    restart: always
    networks:
      - blog_net
  #redis
  blog_redis:
    image: redis:7.0
    volumes:
      - redis_data:/data
    ports:
      - 6379:6379
    restart: always
    command: ['redis-server','--appendonly','yes']
    networks:
      - blog_net
  #后端服务
  fp_blog:
    image: fp_blog:01
    ports:
      - 7777:7777
    networks:
      - blog_net
    restart: always
  #前端服务
  fp_blog_vue:
    image: fp_blog_vue:01
    ports:
      - 80:80
    restart: always

networks:
  blog_net:

volumes:
  mysql_data:
    external: true
  redis_data:
    external: true

image-20231227223353629

image-20231227223439124

image-20231227223518254

image-20231227223625850

posted @ 2023-12-27 22:50  千夜ん  阅读(3)  评论(0编辑  收藏  举报
1 2 3 4