常用命令

Docker命令实战 - 图1

基础实战


1、找镜像
去docker hub,找到nginx镜像 docker地址:https://hub.docker.com/

  1. docker pull nginx #下载最新版
  2. 镜像名:版本名(标签)
  3. docker pull nginx:1.20.1
  4. docker pull redis #下载最新
  5. docker pull redis:6.2.4
  6. ## 下载来的镜像都在本地
  7. docker images #查看所有镜像
  8. redis = redis:latest
  9. docker rmi 镜像名:版本号/镜像id

2、启动容器

启动nginx应用容器,并映射88端口,测试的访问

  1. docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  2. docker run 设置项 镜像名 镜像启动运行的命令(镜像里面默认有的,一般不会写)
  3. # -d:后台运行
  4. # --restart=always: 开机自启
  5. docker run --name=mynginx -d --restart=always -p 88:80 nginx
  6. # 查看正在运行的容器
  7. docker ps
  8. # 查看所有
  9. docker ps -a
  10. # 删除停止的容器
  11. docker rm 容器id/名字
  12. docker rm -f mynginx #强制删除正在运行中的
  13. #停止容器
  14. docker stop 容器id/名字
  15. #再次启动
  16. docker start 容器id/名字
  17. #应用开机自启
  18. docker update 容器id/名字 --restart=always

3、修改容器内容

修改默认的index.html 页面

1、进容器内部修改

  1. # 进入容器内部的系统,修改容器内容
  2. docker exec -it 容器id /bin/bash 或者 docker exec -it 容器id /bin/sh

2、挂载数据到外部修改

  1. docker run --name=mynginx \
  2. -d --restart=always \
  3. -p 88:80 -v /data/html:/usr/share/nginx/html:ro \
  4. nginx
  5. # 修改页面只需要去 主机的 /data/html

4、提交改变


将自己修改好的镜像提交

  1. docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  2. docker commit -a "leifengyang" -m "首页变化" 341d81f7504f guignginx:v1.0

1、镜像传输

  1. # 将镜像保存成压缩包
  2. docker save -o abc.tar guignginx:v1.0
  3. # 别的机器加载这个镜像
  4. docker load -i abc.tar
  5. # 离线安装

5、推送远程仓库


推送镜像到docker hub;应用市场

  1. docker tag local-image:tagname new-repo:tagname
  2. docker push new-repo:tagname
  1. #把旧镜像的名字,改成仓库要求的新版名字
  2. docker tag guignginx:v1.0 leifengyang/guignginx:v1.0
  3. #登录到docker hub
  4. docker login
  5. docker logout(推送完成镜像后退出)
  6. #推送
  7. docker push leifengyang/guignginx:v1.0
  8. #别的机器下载
  9. docker pull leifengyang/guignginx:v1.0

6、补充

  1. docker logs 容器名/id 排错
  2. docker exec -it 容器id /bin/bash
  3. docker 经常修改nginx配置文件
  4. docker run -d -p 80:80
  5. -v /data/html:/usr/share/nginx/html:ro
  6. -v /data/conf/nginx.conf:/etc/nginx/nginx.conf
  7. --name mynginx-02
  8. nginx
  9. #把容器指定位置的东西复制出来
  10. docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf
  11. #把外面的内容复制到容器里面
  12. docker cp /data/conf/nginx.conf 5eff66eec7e1:/etc/nginx/nginx.conf

进阶实战


1、编写自己的应用


编写一个HelloWorld应用
https://start.spring.io/

示例代码: https://gitee.com/leifengyang/java-demo.git

2、将应用打包成镜像


编写Dockerfile将自己的应用打包镜像

1、以前


Java为例
● SpringBoot打包成可执行jar
● 把jar包上传给服务
● 服务器运行java -jar

2、现在


所有机器都安装Docker,任何应用都是镜像,所有机器都可以运行

3、怎么打包-Dockerfile

  1. FROM openjdk:8-jdk-slim-buster
  2. LABEL maintainer=YINXIN
  3. COPY /hello-0.0.1-SNAPSHOT.jar /app.jar
  4. ENTRYPOINT ["java","-jar","/app.jar"]
  1. docker build -t java-demo:v1.0 -f DOCKERFILE .
  2. #-f DOCKERFILE 是默认的 .不可少

思考:
每个应用每次打包,都需要本地编译、再上传服务器、再进行docker构建,如果有1000个应用要打包镜像怎么办?有没有更好的方式?

3、启动容器


启动应用容器

  1. docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0

分享镜像

  1. # 登录docker hub
  2. docker login
  3. #给旧镜像起名
  4. docker tag java-demo:v1.0 yinxin/java-demo:v1.0
  5. # 推送到docker hub
  6. docker push yinxin/java-demo:v1.0
  7. # 别的机器
  8. docker pull yinxin/java-demo:v1.0
  9. # 别的机器运行
  10. docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0

4、部署中间件


部署一个Redis+应用,尝试应用操作Redis产生数据

  1. docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  2. #redis使用自定义配置文件启动
  3. docker run -v /home/yinxin/redis/redis.conf:/etc/redis/redis.conf \
  4. -v /home/yinxin/redis/data:/data \
  5. -d --name myredis \
  6. -p 6379:6379 \
  7. redis:latest redis-server /etc/redis/redis.conf