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
相关推荐
ringking1231 天前
docker源文件配置以及密钥文件
运维·docker·容器
编织幻境的妖1 天前
Docker和Kubernetes 常用命令
docker·容器·kubernetes
Code Warrior1 天前
【Linux】传输层协议UDP
linux·运维·udp
Evan芙1 天前
Bash 变量命名规则与类型使用
linux·运维·开发语言·chrome·bash
menge23331 天前
Linux网站搭建
linux·运维·网络
Bruce_Liuxiaowei1 天前
Kali Linux 加入 Windows 域实战指南:解决域发现与加入失败问题
linux·运维·windows
梁正雄1 天前
linux服务-nginx原理与安装-1
linux·运维·nginx
❀͜͡傀儡师1 天前
docker-compose一键部署Hadoop集群
hadoop·docker·容器
阿伟实验室1 天前
debian10部署简易web服务器
运维·服务器·前端
北京阿法龙科技有限公司1 天前
AR眼镜赋能跨国设备运维:打破空间隔阂,重构高效协作|阿法龙XR云平台
运维·重构·ar