Docker 实战系列:接入生产场景,快速拉起服务

Mysql 容器化安装

  1. 进入 mysql 的镜像网站,查找 mysql 的镜像

    mysql dockerhub官网

  2. 选择使用最多的 5.7 版本,拉取镜像

bash 复制代码
drw@VM-0-14-ubuntu:~$ docker pull mysql:5.7
5.7: Pulling from library/mysql
df9a4d85569b: Pull complete 
ffc89e9dfd88: Pull complete 
90986bb8de6e: Pull complete 
e9f03a1c24ce: Pull complete 
43d05e938198: Pull complete 
1c56c3d4ce74: Pull complete 
ae71319cb779: Pull complete 
68c3898c2015: Pull complete 
6b95a940e7b6: Pull complete 
20e4dcae4c69: Pull complete 
064b2d298fba: Pull complete 
96889c47a44a: Download complete 
9eb6a52b8441: Download complete 
Digest: sha256:4bc6bc963e6d8443453676cae56536f4b8156d78bae03c0145cbe47c2aad73bb
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
  1. 启动一个 mysql,并指定密码和端口开放

    bash 复制代码
     docker run --name mysql -e MYSQL_ROOT_PASSWORD=yourpassword -p 3306:3306 -d mysql:5.7

    eg:

bash 复制代码
drw@VM-0-14-ubuntu:~$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=Dairenwen1092 -p 3306:3306 -d mysql:5.7
02f1cc5416a5cf454f97d59b173d72dcdc9556218a55f83036ff3c880ece3267
  1. 进入容器登录,可以看到已经可以正常登录 mysql 了
sql 复制代码
drw@VM-0-14-ubuntu:~$ docker exec -it mysql bash
bash-4.2# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> 

Redis 容器化安装

  1. 下载 redis 镜像
bash 复制代码
    drw@VM-0-14-ubuntu:~$ docker pull redis:8.0
8.0: Pulling from library/redis
205c6f67f159: Pull complete 
8c8d18d687a1: Pull complete 
cc56679b8a07: Pull complete 
4f4fb700ef54: Pull complete 
c99b74b46dd2: Pull complete 
da539b676105: Pull complete 
b07b7caef816: Pull complete 
68d9479f5b3d: Download complete 
bc43288660d1: Download complete 
Digest: sha256:c6a3c149aae23f911f2f4dbd9d144718f802046b6f1706d4abf4ff84cc2792aa
Status: Downloaded newer image for redis:8.0
docker.io/library/redis:8.0 
  1. 启动 redis 容器
bash 复制代码
drw@VM-0-14-ubuntu:~$ docker run -d --name redis -p 8300:6379 redis:8.0
9671848c75fac867b04f0e3b130eccc677919f4ece6e876c101464a0448e5442    
  1. 进入容器,设置一个 key
sql 复制代码
drw@VM-0-14-ubuntu:~$ docker exec -it redis bash
root@9671848c75fa:/data# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set key1 helloredis
OK
127.0.0.1:6379> get key1
"helloredis"
127.0.0.1:6379>

制作 C++ 容器

  1. 下载 Ubuntu 镜像

    shell 复制代码
    root@139-159-150-152:/data/myworkdir/container# docker pull ubuntu:22.04
    22.04: Pulling from library/ubuntu
    2ab09b027e7f: Pull complete
    Digest:
    sha256:67211c14fa74f070d27cc59d69a7fa9aeff8e28ea118ef3babc295a0428a6d21
    Status: Downloaded newer image for ubuntu:22.04
    docker.io/library/ubuntu:22.04
  2. 启动容器

    shell 复制代码
    root@139-159-150-152:/data/myworkdir/container# docker run --name mygcc -it ubuntu:22.04 bash
    root@50d527b8343e:/#
  3. 配置国内镜像源加速

    shell 复制代码
    root@50d527b8343e:/# sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list
    root@50d527b8343e:/#
  4. 安装 gcc vim

    shell 复制代码
    apt update
    apt install gcc vim -y
  5. 编辑代码

    shell 复制代码
    root@50d527b8343e:/# mkdir src
    root@50d527b8343e:/# cd src
    root@50d527b8343e:/src# vim demo.c

    输入以下内容:

    c 复制代码
    #include <stdio.h>
    
    int main()
    {
        printf("hello docker!\n");
        return 0;
    }
  6. 编译代码

    shell 复制代码
    root@50d527b8343e:/src# gcc demo.c -o demo
  7. 在容器中运行

    shell 复制代码
    root@50d527b8343e:/src# ./demo
    hello docker!
  8. 退出容器

    bash 复制代码
    root@50d527b8343e:/src# exit
    exit
  9. 这个时候容器已经退出,如果想再次进入使用 docker restart 就可以恢复容器

  10. 清理容器释放空间

    shell 复制代码
    docker stop mygcc
    docker rm mygcc

容器资源更新

  1. 运行一个nginx

    shell 复制代码
    docker run -d --name mynginx -p 8086:80 nginx:1.24.0
  2. 我们可以通过 docker top 查看容器中有哪些进程,添加 aux,可以看到占用的内存和CPU信息

shell 复制代码
drw@VM-0-14-ubuntu:~$ docker top mynginx aux
USER                PID                 %CPU                %MEM                VSZ                 RSS                 TTY                 STAT                START               TIME                COMMAND
root                3331998             0.0                 0.1                 8932                6144                ?                   Ss                  22:40               0:00                nginx: master process nginx -g daemon off;
message+            3332076             0.0                 0.0                 9320                2740                ?                   S                   22:40               0:00                nginx: worker process
message+            3332077             0.0                 0.0                 9320                2740                ?                   S                   22:40               0:00                nginx: worker process
message+            3332078             0.0                 0.0                 9320                2740                ?                   S                   22:40               0:00                nginx: worker process
message+            3332079             0.0                 0.0                 9320                2740                ?                   S                   22:40               0:00                nginx: worker process
  1. 通过 docker stats 可以看到资源的动态变化
shell 复制代码
drw@VM-0-14-ubuntu:~$ docker stats

CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O        PIDS 
6b2d1942351c   mynginx   0.00%     5.012MiB / 3.636GiB   0.13%     726B / 126B   1.2MB / 12.3kB   5
  1. 通过 docker update 更新docker的最大内存
bash 复制代码
drw@VM-0-14-ubuntu:~$ docker update -m 100m --memory-swap 10m mynginx
Error response from daemon: Minimum memoryswap limit should be larger than memory limit, see usage

系统提示,设置的内存应该大于已经limit的内存,这说明在docker run的时候需要提前设置内存,否则不方便调整

常见问题

docker create、docker start和docker run有什么区别?

docker create :从Docker映像创建一个全新的容器。但不会立即运行它。

docker start :将启动任何已停止的容器。如果使用 docker create 命令创建容器,则可以使用此命令启动它。

docker run :是创建和启动的组合,如果 docker run 在本地镜像仓库找不到上述映像,它可以从Docker Hub中提取映像。

docker import和docker load有什么区别?

想要了解 docker loaddocker import 命令的区别,还必须知道 docker savedocker export 命令:

  • docker save images_name:将一个镜像导出为文件。再使用 docker load 命令将文件导入为一个镜像,会保存该镜像的所有历史记录。比 docker export 命令导出的文件大,会保存镜像的所有历史记录
  • docker export container_id:将一个容器导出为文件,再使用 docker import 命令将容器导入成为一个新的镜像,但是相比 docker save 命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照

docker rm & docker rmi & docker prune的差异?

docker rm:删除一个或多个容器

docker rmi:删除一个或多个镜像

docker prune:用来删除不再使用的docker对象

相关推荐
wwj888wwj1 小时前
Ansible基础(复习3)
linux·运维·服务器·git·ansible
senijusene1 小时前
IMX6ULL Linux 驱动开发:GPIO 子系统 + misc 框架实现按键输入驱动开发
linux·运维·驱动开发
小雨青年1 小时前
GitHub CLI 与脚本自动化
运维·自动化·github
捞的不谈~1 小时前
解决在Ubuntu系统下使用运行Lucid 相机(HTR003S-001)相应实例出现的依赖库缺失的问题
linux·运维·ubuntu
白毛大侠2 小时前
四表五链:Linux 防火墙的核心框架
linux·运维·网络
铅笔小新z2 小时前
【Linux】进程(中)
linux·运维·服务器
白毛大侠2 小时前
Linux 常用命令速查手册
linux·运维·服务器
艾莉丝努力练剑2 小时前
【Linux线程】Linux系统多线程(五):<线程同步与互斥>线程互斥
linux·运维·服务器·c语言·c++·学习·ubuntu
百结2142 小时前
keepalived高可用与负载均衡
运维·负载均衡