docker入门

安装

官方下载

系统:CentOS 7.9

配置docker yum源。
bash 复制代码
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
启动docker

关机后下次开机又得执行

bash 复制代码
sudo systemctl start docker

关机后开机自动启动

bash 复制代码
systemctl enable docker --now
配置加速
bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://mirror.ccs.tencentyun.com",
        "https://docker.m.daocloud.io"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
案例1
  • 要求

    启动一个nginx,并将它的首页改为自己的页面,发布出去,让所有人都能使用

  • 步骤

    下载镜像 > 启动容器 > 修改页面 > 保存镜像 > 分享社区

搜索镜像

bash 复制代码
docker search nginx

下载

bash 复制代码
docker pull nginx

查看所有镜像

bash 复制代码
docker images

删除镜像

bash 复制代码
docker rmi xxx

查看运行中的容器

bash 复制代码
docker ps

查看所有的容器

bash 复制代码
docker ps -a

运行

bash 复制代码
docker run xxx #会阻塞控制台

#-d:后台启动  --name:容器别名 -p:外部端口映射到docker内部
docker run -d --name mynginx -p 80:80 nginx #不会阻塞控制台

启动

bash 复制代码
docker start xxx

停止

bash 复制代码
docker stop xxx

重启

bash 复制代码
docker restart xxx

查看状态

bash 复制代码
docker stats xxx

查看日志

bash 复制代码
docker logs xxx

删除容器(需先停止运行)

bash 复制代码
docker rm xxx
docker rm -f xxx  #强制删除

进入容器

bash 复制代码
# -it:交互模式 /bin/bash:交互方式
docker exec -it xxx /bin/bash
保存镜像

提交

bash 复制代码
# mynginx:指定容器 
# mynginxiimg:镜像名
# v1.0:tag
docker commit -m "update index.html" mynginx mynginxiimg:v1.0

把镜像保存为文件

bash 复制代码
# -o:指定输出方式
docker save -o mynginximg.tar mynginximg:v1.0

加载

bash 复制代码
# -i:指定镜像的位置
docker load -i mynginx.tar
分享社区

登录

bash 复制代码
docker login

镜像改名

bash 复制代码
docker tag mynginx:v1.0 username/mynginx:v1.0 # 1.0版本
docker tag mynginx:v1.0 username/mynginx:latest # 最新版本

推送

bash 复制代码
docker push username/mynginx:v1.0
存储

动态取值

bash 复制代码
# -a:输出所有容器 -q:只输出id
docker ps -aq
# $(docker ps -ap) 获取指定命令的输出结果
docker rm -f $(docker ps -ap)

目录挂载

bash 复制代码
# 服务器中的某个目录/app/nghtml 对应容器中/user/share/ngin/html
docker run -d -p 80:80 -v /app/nghtml:/user/share/ngin/html --name app01 nginx

卷映射

容器内部的内容映射到本地主机的某个目录

bash 复制代码
# -v ngconf:/etc/nginx  ngconf是一个卷
# ngconf卷在主机中的位置:/var/lib/docker/volumes/
docker run -d -p 80:80 -v /app/nghtml:/user/share/ngin/html -v ngconf:/etc/nginx --name app01 nginx

列出所有的卷

bash 复制代码
docker volume ls

创建一个卷

bash 复制代码
docker volume create xxx

查看卷详情

bash 复制代码
docker volume inspect xxx
自定义网络

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

查看容器详情

bash 复制代码
docker container inspect xxx
docker inspect xxx # 简写

使用exec进入docker容器内

获得另一个容器的内容

bash 复制代码
curl http://172.17.0.2:80

创建网络

bash 复制代码
docker network create mynet

通过自定义的网络启动容器

bash 复制代码
docker run -d -p 88:80 --name app1 --network mynet nginx

使用exec进入docker容器内

获得另一个容器的内容

bash 复制代码
curl http://app2:80
Docker Compose

批量上线

bash 复制代码
docker compose up -d

批量下线

bash 复制代码
docker compose down

指定启动

bash 复制代码
docker compose start xx1 xx2 xx3

指定停止

bash 复制代码
docker compose stop xx1 xx2

对某一个应用扩容

bash 复制代码
docker compose scale xx2=3

命令式安装

bash 复制代码
#创建网络
docker network create blog

#启动mysql
docker run -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=wordpress \
-v mysql-data:/var/lib/mysql \
-v /app/myconf:/etc/mysql/conf.d \
--restart always --name mysql \
--network blog \
mysql:8.0

#启动wordpress
docker run -d -p 8080:80 \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=123456 \
-e WORDPRESS_DB_NAME=wordpress \
-v wordpress:/var/www/html \
--restart always --name wordpress-app \
--network blog \
wordpress:latest

compose.yaml

yaml 复制代码
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:

启动指定yaml文件

bash 复制代码
docker compose -f compose.yaml up -d

下线指定yaml文件中 (不会移除容器中的卷)

bash 复制代码
docker compose -f compose.yaml down
bash 复制代码
# --rmi:移除镜像  -v:移除卷 all:--rmi的值,移除哪个service下的镜像
docker compose -f compose.yaml down --rmi all -v
Dockerfile
bash 复制代码
FROM openjdk:17

LABEL author=yushengjun
# 跟当前Dockerfile文件同级的一个app.jar 复制到镜像中
COPY app.jar /app.jar
# 暴露端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java","-jar","/app.jar"]

根据Dockerfile 制作镜像

bash 复制代码
# -t:镜像名 ./:构建的上下问目录是当前目录
docker build -f Dockerfile -t myjavaapp:v1.0 ./

启动

bash 复制代码
docker run -d -p 8888:8080 myjavaapp:v1.0
相关推荐
退役小学生呀6 分钟前
十五、K8s可观测能力:日志收集
linux·云原生·容器·kubernetes·k8s
van叶~7 分钟前
Linux探秘坊-------15.线程概念与控制
linux·运维·服务器
Andy杨1 小时前
20250718-5-Kubernetes 调度-Pod对象:重启策略+健康检查_笔记
笔记·容器·kubernetes
Andy杨2 小时前
20250718-1-Kubernetes 应用程序生命周期管理-应用部署、升级、弹性_笔记
linux·docker·容器
别致的影分身8 小时前
Docker 镜像原理
运维·docker·容器
阿葱(聪)8 小时前
java 在k8s中的部署流程
java·开发语言·docker·kubernetes
指月小筑8 小时前
K8s 自定义调度器 Part1:通过 Scheduler Extender 实现自定义调度逻辑
云原生·容器·kubernetes·go
庸子8 小时前
Ansible & AWX 自动化运维
运维·自动化·ansible
斯是 陋室9 小时前
在CentOS7.9服务器上安装.NET 8.0 SDK
运维·服务器·开发语言·c++·c#·云计算·.net
?ccc?9 小时前
Kubernetes 架构原理与集群环境部署
容器·架构·kubernetes