Docker 命令大全及应用实战

图片

大数据技术AI

Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料

122篇原创内容

公众号

第一章 docker架构

图片

  • Docker_Host

  • 安装Docker的主机

  • Docker Daemon:

  • 运行在Docker主机上的Docker后台进程

  • Client:

  • 操作Docker主机的客户端(命令行、UI等)

  • Registry:

  • 镜像仓库

  • Docker Hub

  • Images:

  • 镜像,带环境打包好的程序,可以直接启动运行

  • Containers:

  • 容器,由镜像启动起来正在运行中的程序

第二章 docker安装

参照如下文档:https://docs.docker.com/engine/install/centos/

2.1 移除以前docker相关包

 sudo yum remove docker \
 docker-client \
 docker-client-latest \
 docker-common \
 docker-latest \
 docker-latest-logrotate \
 docker-logrotate \
 docker-engine

2.2 配置yum源

 sudo yum install -y yum-utils
 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3 安装docker

 sudo yum install -y docker-ce docker-ce-cli containerd.io

2.4 启动

 systemctl enable docker --now

2.5 配置加速

这里额外添加了docker的生产环境核心配置cgroup

 sudo mkdir -p /etc/docker
 sudo tee /etc/docker/daemon.json <<-'EOF'
 {
   "registry-mirrors": ["https://82ghjr69.mirror.aliyuncs.com"],
   "exec-opts": ["native.cgroupdriver=systemd"],
   "log-driver": "json-file",
   "log-opts": {
     "max-size": "100m"
   },
   "storage-driver": "overlay2"
 }
 EOF
 sudo systemctl daemon-reload
 sudo systemctl restart docker

第三章 基础命令

图片

3.1 找镜像

去docker hub,找到nginx镜像

 #下载最新版
 docker pull nginx  
 
 #镜像名:版本名(标签)
 docker pull nginx:1.20.1
 
 #下载最新
 docker pull redis  
 docker pull redis:6.2.4
 
 ## 下载来的镜像都在本地
 #查看所有镜像
 docker images  
 
 redis = redis:latest
 
 # 删除镜像
 docker rmi 镜像名:版本号/镜像id

3.2 启动容器

 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
 【docker run  设置项   镜像名  】 镜像启动运行的命令(镜像里面默认有的,一般不会写)
 
 
 # 查看正在运行的容器
 docker ps
 # 查看所有
 docker ps -a
 # 删除停止的容器
 docker rm  容器id/名字
 docker rm -f mynginx   #强制删除正在运行中的
 
 #停止容器
 docker stop 容器id/名字
 #再次启动
 docker start 容器id/名字
 
 #应用开机自启
 docker update 容器id/名字 --restart=always
 
 # -d:后台运行
 # --restart=always: 开机自启
 docker run --name=mynginx   -d  --restart=always -p  80:80   nginx

3.3 修改容器内容

3.3.1 进容器内部修改

 # 进入容器内部的系统,修改容器内容
 docker exec -it 容器id  /bin/bash
 
 echo "hello world" >> /usr/share/nginx/html/index.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BDdSutas-1656812363523)(https://mmbiz.qpic.cn/mmbiz_png/3xUEcImibkwLW5vaZsgVx8Rxyjx6pb9j7zPoP1nicLAGRwnRMz2AVg3HpPuKZfU5pEemDaT1weichtk55C3laTpicQ/640?wx_fmt=png)]

3.3.2 挂载数据到外部修改

 [root@bigdata ~]# docker run \
 > --name=mynginx \
 > -d  --restart=always \
 > -p  80:80 \
 > -v /bigdata/html:/usr/share/nginx/html:ro  \
 > -v /bigdata/conf/nginx.conf:/etc/nginx/nginx.conf \
 > nginx
 
 ro:只读
 rw:读写
 
 # 修改页面只需要去 主机的 /data/html
 [root@bigdata ~]# cd /bigdata/html
 [root@bigdata bigdata]# echo "hello world" > index.html

3.4 提交改变

将自己修改好的镜像提交

 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
 
 docker commit -a "duo-nginx"  -m "首页变化" 341d81f7504f duo-nginx:v1.0
 
 # 将镜像保存成压缩包
 docker save -o abc.tar guignginx:v1.0
 
 # 别的机器加载这个镜像
 docker load -i abc.tar

案例:

 # 将自己修改好的镜像提交
 [root@bigdata ~]# docker commit -a "duo" -m "duo-nginx" e3b20 duo-nginx:v1.0
 sha256:2292d3f3896195933b6ba703376456b03f8dd68c3c84520efa318b155556d0e7
 [root@bigdata ~]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
 duo-nginx    v1.0      2292d3f38961   5 seconds ago   141MB
 redis        latest    7614ae9453d1   6 months ago    113MB
 nginx        1.20.2    50fe74b50e0d   6 months ago    141MB
 
 # 运行自己提交的镜像
 [root@bigdata ~]# docker run -d --name=duo-nginx --restart=always -p 80:80 duo-nginx:v1.0
 647ddf50cce8c650bd59d9d1a0817790d2d9daec97854945da1bfaf841a24130
 [root@bigdata ~]# docker ps
 CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS                               NAMES
 647ddf50cce8   duo-nginx:v1.0   "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   duo-nginx
 
 
 # 将镜像保存成压缩包
 [root@bigdata ~]# docker save -o duo-nginx.tar duo-nginx:v1.0
 [root@bigdata ~]# ls
 duo-nginx.tar

3.5 推送到远程仓库

# 把旧镜像的名字,改成仓库要求的新版名字
 [root@bigdata ~]# docker tag duo-nginx:v1.0 hyunbar/duo-nginx:v1.0
 [root@bigdata ~]# docker images
 REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
 hyunbar             latest    2292d3f38961   24 minutes ago   141MB
 hyunbar/duo-nginx   v1.0      2292d3f38961   24 minutes ago   141MB
 
 # 登录到docker hub
 [root@bigdata ~]# docker login
 Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
 Username: hyunbar
 Password:
 WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
 Configure a credential helper to remove this warning. See
 https://docs.docker.com/engine/reference/commandline/login/#credentials-store
 
 Login Succeeded
 
 # 推送
 [root@bigdata ~]# docker push hyunbar/duo-nginx:v1.0
 The push refers to repository [docker.io/hyunbar/duo-nginx]
 903b87f966d8: Pushed
 c75c795b7d44: Mounted from library/nginx
 4e498ce5ae6a: Mounted from library/nginx
 35437a3771fc: Mounted from library/nginx
 108a6d6c3e60: Mounted from library/nginx
 9ccbab2746b8: Mounted from library/nginx
 2edcec3590a4: Mounted from library/nginx
 v1.0: digest: sha256:68899b426c79c94256e801f14868a2ad070d7c9760f2381d8d5f55679ae88d86 size: 1778
 
 # 推送完成镜像后退出登录
 [root@bigdata ~]# docker logout
 Removing login credentials for https://index.docker.io/v1/

创建仓库

图片

推送成功

图片

3.6 其他

(1)查看docker容器运行日志

 [root@bigdata ~]# docker logs mynginx(容器id)
 /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
 /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
 。。。
 34.78.120.100 - - [22/Jun/2022:11:55:36 +0000] "GET / HTTP/1.1" 200 12 "-" "python-requests/2.28.0" "-"

(2)把容器指定位置的东西复制出来

 [root@bigdata ~]# docker cp mynginx:/etc/nginx/nginx.conf /bigdata/conf/nginx.conf
 [root@bigdata bigdata]# ls conf/
 nginx.conf

(3)把外面的内容复制到容器里面

 [root@bigdata ~]# docker cp /bigdata/conf/nginx.conf  mynginx:/nginx.conf
 
 [root@bigdata bigdata]# docker exec -it mynginx /bin/bash
 root@432635f03ed9:/# ls
 bin   dev      docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
 boot  docker-entrypoint.d  etc       lib   media  opt  root  sbin  sys  usr
 root@432635f03ed9:/# ls
 bin   dev      docker-entrypoint.sh  home  lib64  mnt   opt root  sbin  sys  usr
 boot  docker-entrypoint.d  etc       lib   media  nginx.conf  proc  run   srv   tmp  var
 root@432635f03ed9:/#

第四章 实战应用

4.1 应用

从官网创建并下载:https://start.spring.io

图片

spring应用代码

 package com.example.controller;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController
 public class CounterController {
 
     @Autowired
     StringRedisTemplate redisTemplate;
 
     @GetMapping("/pagecount")
     public String count(){
        // 每次点击页面,自动+1
         Long count = redisTemplate.opsForValue().increment("count");
         return  count+ "  人访问了";
 
     }
 }
 

配置文件

 spring.redis.host=bigdata
 spring.redis.password=123456

访问地址:http://localhost:8080/pagecount 访问三次

图片

4.2 docker flie 打包

 FROM openjdk:8-jdk-slim
 LABEL maintainer=duo
 
 COPY target/*.jar /app.jar
 
 ENTRYPOINT ["java","-jar","/app.jar"]

构建镜像

 [root@bigdata demo]# docker build -t java-demo:v1.0 .
 Sending build context to Docker daemon   27.7MB
 Step 1/4 : FROM openjdk:8-jdk-slim
 8-jdk-slim: Pulling from library/openjdk
 a2abf6c4d29d: Already exists
 2bbde5250315: Pull complete
 115191490c27: Pull complete
 61b680ac8083: Pull complete
 Digest: sha256:25efb6e0609b95af243b4e3ce2c27dbc1022ef2a4db2164b7afa066c0db18137
 Status: Downloaded newer image for openjdk:8-jdk-slim
  ---> 9afd0fe33df7
 Step 2/4 : LABEL maintainer=duo
  ---> Running in 11c914b66cad
 Removing intermediate container 11c914b66cad
  ---> 4accae2ef6da
 Step 3/4 : COPY target/*.jar /app.jar
  ---> 2a8148ba6a03
 Step 4/4 : ENTRYPOINT ["java","-jar","/app.jar"]
  ---> Running in dd89e103f249
 Removing intermediate container dd89e103f249
  ---> d440c1fad876
 Successfully built d440c1fad876
 Successfully tagged java-demo:v1.0

查看镜像

 [root@bigdata demo]# docker images
 REPOSITORY   TAG          IMAGE ID       CREATED              SIZE
 java-demo    v1.0         d440c1fad876   About a minute ago   323MB
 duo-nginx    v1.0         2292d3f38961   2 days ago           141MB
 nginx        latest       605c77e624dd   5 months ago         141MB
 openjdk      8-jdk-slim   9afd0fe33df7   6 months ago         296MB

4.3 启动容器

启动容器

 [root@bigdata demo]# docker run -d -p 8080:8080 --name java-app java-demo:v1.0
 1c57b808c34b03525f27c8dba45d38de48e2d50bb2ca099e8bae5bd9f7b6a4ab
 [root@bigdata demo]# docker ps
 CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS                                       NAMES
 1c57b808c34b   java-demo:v1.0   "java -jar /app.jar"     5 seconds ago   Up 4 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   java-app

查看log:

 [root@bigdata demo]# docker logs -f 2d3c0fdcb79f
 
   .   ____          _            __ _ _
  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
   '  |____| .__|_| |_|_| |_\__, | / / / /
  =========|_|==============|___/=/_/_/_/
  :: Spring Boot ::                (v2.7.0)
 ....
 
 2022-06-23 12:48:37.695  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms

查看结果:

图片

4.4 部署redis

 [root@bigdata redis]# docker run  \
 > -d \
 > --name=duo-redis \
 > -v /bigdata/data/redis/conf/redis.conf:/etc/redis/redis.conf \
 > -v /bigdata/data/redis/data:/data \
 > --restart=always \
 > -p 6379:6379 \
 > redis:latest \
 > redis-server /etc/redis/redis.conf 
 >
 
 
 [root@bigdata redis]# cat conf/redis.conf
 appendonly yes
 requirepass 123456

图片

图片

猜你喜欢

转载自blog.csdn.net/hyunbar/article/details/125581246