Mysql 容器化安装
-
进入 mysql 的镜像网站,查找 mysql 的镜像
-
选择使用最多的 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
-
启动一个 mysql,并指定密码和端口开放
bashdocker run --name mysql -e MYSQL_ROOT_PASSWORD=yourpassword -p 3306:3306 -d mysql:5.7eg:
bash
drw@VM-0-14-ubuntu:~$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=Dairenwen1092 -p 3306:3306 -d mysql:5.7
02f1cc5416a5cf454f97d59b173d72dcdc9556218a55f83036ff3c880ece3267
- 进入容器登录,可以看到已经可以正常登录 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 容器化安装
- 下载 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
- 启动 redis 容器
bash
drw@VM-0-14-ubuntu:~$ docker run -d --name redis -p 8300:6379 redis:8.0
9671848c75fac867b04f0e3b130eccc677919f4ece6e876c101464a0448e5442
- 进入容器,设置一个 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++ 容器
-
下载 Ubuntu 镜像
shellroot@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 -
启动容器
shellroot@139-159-150-152:/data/myworkdir/container# docker run --name mygcc -it ubuntu:22.04 bash root@50d527b8343e:/# -
配置国内镜像源加速
shellroot@50d527b8343e:/# sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list root@50d527b8343e:/# -
安装 gcc vim
shellapt update apt install gcc vim -y -
编辑代码
shellroot@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; } -
编译代码
shellroot@50d527b8343e:/src# gcc demo.c -o demo -
在容器中运行
shellroot@50d527b8343e:/src# ./demo hello docker! -
退出容器
bashroot@50d527b8343e:/src# exit exit -
这个时候容器已经退出,如果想再次进入使用
docker restart就可以恢复容器 -
清理容器释放空间
shelldocker stop mygcc docker rm mygcc
容器资源更新
-
运行一个nginx
shelldocker run -d --name mynginx -p 8086:80 nginx:1.24.0 -
我们可以通过
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
- 通过
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
- 通过
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 load 与 docker import 命令的区别,还必须知道 docker save 与 docker 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对象
