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
相关推荐
dntktop23 分钟前
隐私保护+性能优化,RyTuneX 让你的电脑更快更安全
运维·windows
心惠天意42 分钟前
docker-compose篇---创建jupyter并可用sudo的创建方式
docker·jupyter·容器
fajianchen1 小时前
大厂案例——腾讯蓝鲸DevOps类应用的设计与实践
运维·devops
黯然~销魂1 小时前
root用户Linux银河麒麟服务器安装vnc服务
linux·运维·服务器
huaweichenai2 小时前
windows下修改docker的镜像存储地址
运维·docker·容器
菠萝炒饭pineapple-boss2 小时前
Dockerfile另一种使用普通用户启动的方式
linux·docker·dockerfile
�时过境迁,物是人非3 小时前
ECS中实现Nginx四层和七层负载均衡以及ALB/NLB实现负载均衡
运维·nginx·负载均衡
Zfox_3 小时前
【Linux】进程间关系与守护进程
linux·运维·服务器·c++
大新新大浩浩3 小时前
jenkins平台使用Login Theme、Customizable Header插件定制修改登陆页图片文字及首页标题
运维·servlet·jenkins
laimaxgg3 小时前
Linux关于华为云开放端口号后连接失败问题解决
linux·运维·服务器·网络·tcp/ip·华为云