docker并非是一个通用的容器,它依赖已存在并运行的Linux内核环境
docker实质是在运行的Linux下制造了一个隔离的文件环境,必须要部署在Linux内核上
我们使用笔记本,搭建win11系统,系统上用VMware软件搭建Ubuntu环境,Ubuntu上下载docker,在docker上面再模拟一个Ubuntu
--name
:为容器指定一个新的name
-i
:以交互式模式运行容器,通常与-t
同时使用(interactive)
-t
:为容器重新分配一个伪输入终端,通常与-i
同时使用(tyy)
也即启动交互式容器(前端有伪终端,等待交互)
-P
:随机端口映射,大写
-p
:指定端口映射,小写
我们普通启动
root@ubuntu:/hyerledgerFabric# docker run ubuntu
root@ubuntu:/hyerledgerFabric#
没效果。此时需要用到交互式容器
docker run -it ubuntu /bin/bash
如果要退出终端,直接输入exit,此时容器停止
可以run进去容器,ctrl+p+q退出,容器不停止,此时可以启动已经停止的容器
docker start 容器ID或者容器名
重启容器
docker restart ID或者name
停止容器
docker stop ID或者name
强行停止容器
docker kill 容器ID或者容器名
删除已经停止的容器
docker rm ID或者name
在大部分场景下,我们希望docker的服务是在后台运行的,我们可以通过-d
指定容器的后台运行模式
docker run -d docker_name
redis前后台启动演示case
很重要一点:docker容器后台运行,必须有一个前台进程,否则会立即是自杀,所以对于ubuntu来说必须要用-it
容器的命令如果不是那种一直挂起的命令(top.tail),就是会自动退出,这个是docker的机制问题
一般对于数据库都是使用-d
后台默默启动
-it
-d
想起我们以前学redis的时候,到处都是坑,安装环境啥的配置config啥的,麻烦死了。现在有了docker一条命令解决问题
docker logs 容器ID
当redis出错
root@ubuntu:/home/smile# docker logs a22dd4f7caf4
1:C 09 May 2022 12:56:24.442 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 09 May 2022 12:56:24.442 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 09 May 2022 12:56:24.442 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 09 May 2022 12:56:24.443 * monotonic clock: POSIX clock_gettime
1:M 09 May 2022 12:56:24.445 * Running mode=standalone, port=6379.
1:M 09 May 2022 12:56:24.446 # Server initialized
1:M 09 May 2022 12:56:24.446 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 09 May 2022 12:56:24.447 * Ready to accept connections
后面还有图形化监控哈哈哈哈
docker top 容器ID
可以把容器看作一个简易版的Linux环境和运行在其中的应用程序
以json形式保存
docker inspect 容器ID
docker exec -it 容器ID bashShell
#或者
docker attach 容器ID
root@ubuntu:/home/smile# docker exec -it 7672921e03e4 /bin/bash
root@7672921e03e4:/# uname
Linux
root@ubuntu:/home/smile# docker attach 7672921e03e4
root@7672921e03e4:/#
注意区别:
推荐使用exec
用redis案例实操
root@ubuntu:/home/smile# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a22dd4f7caf4 redis "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 6379/tcp strange_elgamal
root@ubuntu:/home/smile# docker exec -it a22dd4f7caf4 /bin/bash
root@a22dd4f7caf4:/data# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
如果我们在一家公司,我们在容器中的Ubuntu中新创建了一个文件,怎么把容器中的内容文件拷贝到主机上,用来备份
docker cp 容器ID:容器内路径 目的主机路径
上一个只能把容器中的资料拷贝出来,这个可以把整个镜像或者容器进行备份,默认导出到当前路径下面
docker export 容器ID > abcd.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
出容器**
上一个只能把容器中的资料拷贝出来,这个可以把整个镜像或者容器进行备份,默认导出到当前路径下面
docker export 容器ID > abcd.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号