0
点赞
收藏
分享

微信扫一扫

Docker 命令大全及应用实战

_LEON_ 2022-07-12 阅读 89

Docker 命令大全及应用实战_redis

第一章 docker架构

Docker 命令大全及应用实战_redis_02

  • 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

第三章 基础命令

Docker 命令大全及应用实战_nginx_03

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

Docker 命令大全及应用实战_nginx_04

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/

创建仓库

Docker 命令大全及应用实战_redis_05

推送成功

Docker 命令大全及应用实战_docker_06

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

Docker 命令大全及应用实战_docker_07

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 访问三次

Docker 命令大全及应用实战_redis_08

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

查看结果:

Docker 命令大全及应用实战_docker_09

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

Docker 命令大全及应用实战_nginx_10


Docker 命令大全及应用实战_redis_11

举报

相关推荐

0 条评论