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
相关推荐
IT成长日记2 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
热爱生活的猴子2 小时前
阿里云服务器正确配置 Docker 国内镜像的方法
服务器·阿里云·docker
物联网老王4 小时前
Ubuntu Linux Cursor 安装与使用一
linux·运维·ubuntu
艾伦_耶格宇6 小时前
【ACP】阿里云云计算高级运维工程师--ACP
运维·阿里云·云计算
FrankYoou6 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
一位摩羯座DBA6 小时前
Redhat&Centos挂载镜像
linux·运维·centos
隆里卡那唔6 小时前
在dify中通过http请求neo4j时为什么需要将localhost变为host.docker.internal
http·docker·neo4j
疯子的模样6 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
cui_win7 小时前
【网络】Linux 内核优化实战 - net.core.flow_limit_table_len
linux·运维·网络
风清再凯8 小时前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible