Docker:快速部署

docker安装:​‌​‬​⁠​‍‬​‍‬‬‌​‬‬‬​⁠​‍​​‌‬‌​​​​​​‌​​​​⁠​‍⁠‌安装Docker - 飞书云文档 (feishu.cn)

docker命令解读

bash 复制代码
docker run -d \
> --name mysql \
> -p 3306:3306 \
> -e TZ-Asia/Shanghai \
> -e MYSQL_ROOT_PASSWORD=123 \
> mysql:5.7

· docker run:创建并运行一个容器,-d是让容器在后台运行

· --name mysql:给容器起一个名字,必须唯一

· -p 3307:3306:设置端口映射,宿主机端口映射到容器的端口

· -e TZ-Asia/Shanghai 和 -e MYSQL_ROOT_PASSWORD=123 :环境变量,由镜像的创建者定义,在Docker Hub Container Image Library | App Containerization中查询

· mysql :5.7:指定运行的镜像的名字( 不写版本的话默认最新版本)

docker常见命令:

docker pull:从镜像仓库拉取到本地

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker pull nginx

docker images:查看所有的本地镜像

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    605c77e624dd   2 years ago   141MB
mysql        latest    3218b38490ce   2 years ago   516MB

docker rmi:删除镜像

docker build:自定义镜像

docker save:将镜像打包成一个压缩文件

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker save -o nginx.tar nginx:latest
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# ll
total 2167864
-rw-r--r-- 1 root root           0 Jul  5 20:54 ??ՙ?n?
-rw------- 1 root root   145902080 Sep 30 16:37 nginx.tar

docker load:将压缩文件解压成镜像

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker load -i nginx.tar
2edcec3590a4: Loading layer [==================================================>]  83.86MB/83.86MB
e379e8aedd4d: Loading layer [==================================================>]     62MB/62MB
b8d6e692a25e: Loading layer [==================================================>]  3.072kB/3.072kB
f1db227348d0: Loading layer [==================================================>]  4.096kB/4.096kB
32ce5f6a5106: Loading layer [==================================================>]  3.584kB/3.584kB
d874fd2bc83b: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest

docker push:将镜像推送到镜像仓库

docker run:创建并运行容器

docker stop:停止容器的进程

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker stop nginx
nginx

docker start:启动容器的进程

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker start nginx
nginx

docker ps:查看当前容器的运行状态

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                NAMES
3f490131959f   nginx     "/docker-entrypoint...."   2 minutes ago   Up 4 seconds   0.0.0.0:80->80/tcp   nginx

docker rm:删除容器

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker rm mysql
mysql

docker logs:查看容器日志(停下使用Ctrl+C)

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker logs -f nginx

docker exec:进入容器内部

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker exec -it nginx bash
root@3f490131959f:/# 

命令的别名:

进入编辑模式

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# vi ~/.bashrc

自定义命令别名

bash 复制代码
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'

使别名生效

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# source ~/.bashrc

数据卷:

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

创建数据卷:/var/lib/docker/volume/html/_data

以利用nginx容器部署静态资源为例

相关命令:

docker run -v:挂载数据卷

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker run -d \
> --name nginx \
> -p 80:80 \
> -v html:/usr/share/nginx/html \     #挂载数据卷
> nginx

docker volume create :创建数据卷

docker volume ls:查看所有数据卷

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker volume ls

docker volume rm:删除指定数据卷

docker volume inspect :查看某个数据卷详情

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker volume inspect html
[
    {
        "CreatedAt": "2024-10-01T16:49:55+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/html/_data",
        "Name": "html",
        "Options": null,
        "Scope": "local"
    }
]

docker volume prune :清除数据卷

docker inspect:查看容器是否有数据卷挂载

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker inspect mysql

连接Docker容器中的mysql时要注意端口在防火墙和阿里云是否可见

数据挂载:

基于宿主目录实现mysql数据目录,配置文件,初始化脚本的挂载

挂载/root/mysql/data到容器内的/var/lib/mysql

挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录

挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录

在执行docker run命令时,使用-v 本地目录:容器内目录可以完成本地目录的挂载

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ mysql]# docker run -d \
> --name mysql \
> -p 3307:3306 \
> -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

自定义镜像:

镜像结构:层(Layer)

镜像分层的好处:相同的层不用重复下载,节省了空间

Dockerfile:

Dockerfile就是一个文本文件,其中包含多条指令(instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile来构建镜像。

常见指令如下:

编写好Dockerfile之后使用以下docker命令创建自己的镜像

bash 复制代码
docker build -t myImage:1.0 .

**· -t:**是指定镜像名,格式为repository:tag的格式,不指定tag时,默认为latest

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

Docker网络互联:

默认,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上:

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker inspect dd
"IPAddress": "172.17.0.4",
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker inspect mysql
"IPAddress": "172.17.0.3",

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

创建自有网络:

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker network create demo

查看所有网络:

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker network ls

将指定容器添加到网络:

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker network connect demo mysql

查看网络:

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker inspect demo

创建容器时将其添加到网络:

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker run -d \
> --name dd \
> -p 8080:8080 \
> --network demo \
> docker-demo

nginx

bash 复制代码
[root@iZ2vcduzd0jmjyj0gisbvzZ ~]# docker run -d \
> --name dd \
> -p 18080:18080 \
> -p 18081:18081 \
> -v /root/hmsc/nginx/html:/usr/share/nginx/html \
> -v /root/hmsc/nginx/nginx.conf:/ect/nginx/nginx.conf \
> --network demo \
> docker-demo

DockerCompose:

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

使用命令行部署mysql

bash 复制代码
#使用命令行创建Docker容器
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 demo \
mysql

使用DockerCompose部署mysql

bash 复制代码
#使用yml指定DockerConpose部署的Docker容器
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"
    network:
      - hmall
相关推荐
wuxingge8 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
志凌海纳SmartX9 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总9 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿9 小时前
k8s 集群安装
云原生·容器·kubernetes
意疏10 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
墨鸦_Cormorant10 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker
Code_Artist10 小时前
Docker镜像加速解决方案:配置HTTP代理,让Docker学会科学上网!
docker·云原生·容器
颜淡慕潇11 小时前
【K8S系列】kubectl describe pod显示ImagePullBackOff,如何进一步排查?
后端·云原生·容器·kubernetes
wanmei00211 小时前
Dockerfile复制目录进入镜像里
docker
inter_peng11 小时前
[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法
tcp/ip·docker·eureka