ubuntu容器说明 — 容器的启动和运行


文章目录

  • ubuntu容器说明 — 容器的启动和运行
  • 启动交互式容器(前台命令行)
  • 启动
  • 重要部分
  • **1. 有镜像才能创建容器,这是根本前提(下载一个redis6.0.8镜像演示)**
  • **==2. 启动守护式容器(后台服务器)==**
  • **3. 查看容器日志**
  • **4. 查看容器内运行的进程**
  • **5. 查看容器内部细节**
  • **6. 进入正在运行的容器并且以命令行交互**
  • **7. 从容器中拷贝文件到主机上**
  • **8. 导入和导出容器**
  • 导出
  • 导入
  • 导出
  • 导入



有镜像才能创建容器,这是根本前提(下载一个Ubuntu或者centos镜像演示)

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#

没效果。此时需要用到交互式容器

启动

  1. 新建+启动容器,ubuntu要有bash/shell作为交互式接口。
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

重要部分

1. 有镜像才能创建容器,这是根本前提(下载一个redis6.0.8镜像演示)

2. 启动守护式容器(后台服务器)

  • 在大部分场景下,我们希望docker的服务是在后台运行的,我们可以通过-d指定容器的后台运行模式
docker run -d docker_name
  • redis前后台启动演示case

很重要一点:docker容器后台运行,必须有一个前台进程,否则会立即是自杀,所以对于ubuntu来说必须要用-it

容器的命令如果不是那种一直挂起的命令(top.tail),就是会自动退出,这个是docker的机制问题

容器 启动就运行程序_redis

一般对于数据库都是使用-d后台默默启动

  • 前台交互式-it
  • 后台守护式-d

想起我们以前学redis的时候,到处都是坑,安装环境啥的配置config啥的,麻烦死了。现在有了docker一条命令解决问题

3. 查看容器日志

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

后面还有图形化监控哈哈哈哈

4. 查看容器内运行的进程

docker top 容器ID

容器 启动就运行程序_docker_02

5. 查看容器内部细节

可以把容器看作一个简易版的Linux环境和运行在其中的应用程序

以json形式保存

docker inspect 容器ID

容器 启动就运行程序_docker_03

6. 进入正在运行的容器并且以命令行交互

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:/#

注意区别:

  • attach直接进入容器启动命令的终端,用exit退出不会产生新的进程
  • exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出不会导致容器的停止

推荐使用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"

7. 从容器中拷贝文件到主机上

如果我们在一家公司,我们在容器中的Ubuntu中新创建了一个文件,怎么把容器中的内容文件拷贝到主机上,用来备份

docker cp 容器ID:容器内路径 目的主机路径

容器 启动就运行程序_容器 启动就运行程序_04

8. 导入和导出容器

上一个只能把容器中的资料拷贝出来,这个可以把整个镜像或者容器进行备份,默认导出到当前路径下面

导出

docker export 容器ID > abcd.tar

导入

cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

容器 启动就运行程序_ubuntu_05

出容器**

上一个只能把容器中的资料拷贝出来,这个可以把整个镜像或者容器进行备份,默认导出到当前路径下面

导出

docker export 容器ID > abcd.tar

导入

cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号