Docker容器

Docker容器由镜像产生,相当于一个虚拟linux操作系统。

容器内部操作界面为虚拟linux终端,操作方式跟linux一致,比如可以在容器里面安装各种软件。

查看已有镜像

docker images

运行镜像产生Docker容器。

每run一次都会产生新的容器。每个容器有自己的ID和NAME。

# 自定义容器名字:container_name,tag相当于版本号,一般为latest,有时候可以不加
docker run -it --name=container_name image_name:tag

退出容器

exit         #容器会关闭
ctrl+p+q     #容器不关闭,容器内部正在运行的任务不会停止. ctrl+p+q表示按住ctrl不动,先按下p,后按下q

推荐使用退出容器方式

ctrl+p+q

两种方式退出之后,容器都还存在。在宿主机终端,可以查看宿主机上容器信息(ID,NAME,STATUS等)

docker ps -a          # 所有容器
docker ps -n 5        # 前五个

STATUS为UP时表示,容器在启动状态。

重新进入容器

# 如果退出方式:exit, 则需要两步
docker start container_name  #启动容器
docker attach container_name #进入容器

# 如果退出方式 ctrl+p+q,则只需要一步
docker attach container_name

容器内添加普通用户

进入容器之后,默认为root用户,可以添加普通用户

useradd user_name  # user_name 自定义

为普通用户设置密码

passwd user_name

此时,ctrl+p+q退出容器,然后再attach重新进入容器,

此时容器内用户不是root用户,仍然是退出之前的普通用户。

设置权限

可以考虑以容器内root用户身份对重要数据文件设置权限,

然后以普通用户身份进入容器使用相关数据和应用,确保重要数据安全。

比如,限制普通用户user1对文件file1只有读取权限,没有写权限。

chmod o=r file1  # 此命令需要在root用户之下输入。o=r意思是,others权限只是read

宿主机与容器通信

宿主机复制文件到容器

docker cp file_name container_id:/ABSOLUTE_DIR  # /ABSOLUTE_DIR 表示容器内绝对路径

运行Docker容器的操作系统,称为宿主机。如果希望容器内程序或软件读写宿主机数据文件,可以挂载宿主机目录到容器。

挂载主机目录(/HOST_ABSOLUTE_DIR)到容器某个目录/CONTAINER_ABSOLUTE_DIR,目录需要是绝对路径(absolute directory),即以'/'开头。

docker run -it --name=container_name -v /HOST_ABSOLUTE_DIR:/CONTAINER_ABSOLUTE_DIR image_name:tag

挂载之后,容器可以跟宿主机共享数据,容器内部程序或软件可以调用宿主机该目录文件(比如,读写操作)。

保存容器修改

容器内做了修改,比如安装了生物信息分析软件。

但是再次运行镜像,产生的新容器内并没有保留这些修改。

如果希望新产生的容器保留这些修改,需要把修改过的容器commit成新的镜像。

运行新镜像产生新容器,新容器里面就会保留修改。

容器commit为新镜像

docker commit container_id image_name:tag

为了便于分享新镜像,可以打包保存于本地

docker save image_name > image_name.tar

使用打包好的新镜像

docker load < image_name.tar

容器使用建议:

  1. 不在容器存放数据,只在容器安装应用
  2. 数据存放本地,通过挂载实现容器对本地数据的利用
  3. 服务器使用docker时不要进入其他用户产生的容器,以免造成干扰。pc机使用docker没有这个问题。
  4. 容器最好自定义名字。
  5. 推荐使用退出容器方式:ctrl+p+q

!!!以下两种操作,务必小心谨慎,防止误删有用数据和应用!!!

docker rm container_id或container_name    #删除容器
docker rmi image_id或image_name           #删除镜像。必须删除镜像生成的所有容器,才能删掉这个镜像

results matching ""

    No results matching ""