加载中...

Docker的安装和使用


Docker的安装和使用

移除旧版本docker

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

配置docker yum源

sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 最新 docker

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

启动& 开机启动docker; enable + start 二合一

systemctl enable docker --now

配置加速

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

Docker相关命令

查看下载相关命令

#查看运行中的容器
docker ps
#查看所有容器
docker ps -a
#搜索镜像
docker search nginx
#下载镜像
docker pull nginx
#下载指定版本镜像
docker pull nginx:1.26.0
#查看所有镜像
docker images
#删除指定id的镜像
docker rmi e784f4560448

Docker启动相关命令

#运行一个新容器
docker run nginx
#停止容器
docker stop keen_blackwell
#启动容器
docker start 592
#重启容器
docker restart 592
#查看容器资源占用情况
docker stats 592
#查看容器日志
docker logs 592
#删除指定容器
docker rm 592
#强制删除指定容器
docker rm -f 592
# 后台启动容器
docker run -d --name mynginx nginx
# 后台启动并暴露端口
docker run -d --name mynginx -p 80:80 nginx
# 进入容器内部
docker exec -it mynginx /bin/bash

上传Docker Hub

# 登录 docker hub
docker login
# 重新给镜像打标签
docker tag mynginx:v1.0 leifengyang/mynginx:v1.0
# 推送镜像
docker push leifengyang/mynginx:v1.0

加载删除镜像

# 提交容器变化打成一个新的镜像
docker commit -m "update index.html" mynginx mynginx:v1.0
# 保存镜像为指定文件
docker save -o mynginx.tar mynginx:v1.0
# 删除多个镜像
docker rmi bde7d154a67f 94543a6c1aef e784f4560448
# 加载镜像
docker load -i mynginx.tar 

Docker存储

两种方式,注意区分:

  • 目录挂载: -v /app/nghtml:/usr/share/nginx/html
  • 卷映射:-v ngconf:/etc/nginx
  • 目录挂载可以理解为弄一个空文件,指向了对应的目录,如Nginx,将写好的放在/app/nghtml,就会放在/usr/share/nginx/html下面

  • 卷映射可以理解为复制Nginx的配置到前面的地址,这样才能启动

  • 卷映射会被放置在/var/lib/docker/volumes/<配置的名字,这里是ngconf>

docker run -d -p 99:80 \
-v /app/nghtml:/usr/share/nginx/html \
-v ngconf:/etc/nginx \
--name app03 \
nginx

卷映射命令

# 查看
docker volume ls
# 自己新增卷
docker volume create name
# 查看卷的详情
docker volume inspect ngconf

Docker 网络

docker为每个容器分配唯一ip,使用容器ip+容器端口相互访问

ip地址可能会变化,所以需要自定义网络。可以理解为配置一个域名就可以对ip进行映射访问

#自定义网络
docker network create mynet
# 列举网络
docker network ls
#主节点
docker run -d -p 80:80 --network mynet --name app01 nginx
docker run -d -p 88:80 --network mynet --name app02 nginx

# 进入app01
docker exec -it -app01 bash
# 访问app02,注意要访问80端口,因为容器内部暴露的是80
curl http://app02:80

Docker Compose

通过yaml文件一键安装配置相关容器,并直接启动

# 根据yaml文件,一键下载配置上线
docker compose up -d
# 停止
docker compose down
# 如果不指定文件,默认就会找compose.yaml
docker compose -f aabbcc.yaml up -d
# 如果想彻底删除卷和镜像
docker compose down --rmi all -v

compose.yaml

去官网了解书写规范

# name 本次部署的应用名字
# services 需要启动的应用服务
# network 网络 如果使用,需要在下面指定网络networks
# ports 端口
# image 镜像
# environment 环境变量
# volumes 目录挂载 如果使用了,需要在下面指定volumes
# restart 开机自启
# container_name 容器名,如果不指定的话会默认用自己写的mysql...
# depends_on 依赖 例如这里的WordPress依赖MySQL
name: myblog
services:
  mysql:
    container_name: mysql
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=wordpress
    volumes:
      - mysql-data:/var/lib/mysql
      - /app/myconf:/etc/mysql/conf.d
    restart: always
    networks:
      - blog

  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: 123456
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress:/var/www/html
    restart: always
    networks:
      - blog
    depends_on:
      - mysql

volumes:
  mysql-data:
  wordpress:

networks:
  blog:

Dockerfile

自定义自己的镜像

# FROM 指定镜像基础环境
# LABEL 自定义标签
# COPY 复制文件到镜像
# ENTRYPOINT 复制固定启动命令
FROM openjdk:17

LABEL author=leifengyang

COPY app.jar /app.jar

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]

文章作者:
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 !