加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Docker学习笔记

发布时间:2020-12-16 03:51:04 所属栏目:安全 来源:网络整理
导读:安装docker yum源配置 tee /etc/yum.repos.d/docker.repo tee 命令是把输入添加到文件,EOF自定义结束标志。 安装docker yum install -y docker-engine 验证 docker version 启动Docker服务 service docker start 镜像操纵 docker images可以查看本地主机上

安装docker

yum源配置

tee /etc/yum.repos.d/docker.repo <<- 'EOF'
[dockerrepo]
name=Docker repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

tee命令是把输入添加到文件,EOF自定义结束标志。

安装docker

yum install -y docker-engine

验证

docker version

启动Docker服务

service docker start

镜像操纵

  • docker images可以查看本地主机上已有的镜像
  • docker inspect 查看镜像的详细信息
  • docker search 可以搜索远端仓库中是否有共享的镜像,默认搜索Docker hub官方仓库的镜像
  • docker rmi :使用docker rmi命令可以删除镜像,其中image可以为标签或id,当同一个镜像拥有多个标签,docker rmi只是删除该镜像多个标签中指定标签而已,而不影响镜像文件
  • 创建tag命令;docker tag imageid tagname
  • 迁出镜像docker save -o filename.tar imagenaeme:tag,其中image可以为标签或ID,-o设置存储压缩后的文件名称
  • 载入镜像docker load --input .tar 或者 docker load < imagename.tar
  • 上传镜像到仓库,默认上传到DockerHub官方仓库(需要登录);docker push username/imagename,push需要注意,repository的名字开头必须是你dockerhub的用户名,比如zhangsan123/testimagename,zhangsan123dockerhub的用户名;如果不是,需要使用docker tag命令更改成这样的名称才能上传成功。

镜像创建

创建镜像有三种:基于已有镜像的容器创建,基于本地模板的导入,基于Dockerfile创建

  • 基于已有镜像文件的容器创建:docker commit,-a 作者信息,-m提交信息,-p提交时暂停容器运行

容器

容器听起来很高大上,没学过Docker的以为是什么高深的东西,其实它就是镜像文件的一个运行实例

  • docker run -ti ubuntu bash;

ubuntu镜像创建一个容器并启动;-ti命令就是把容器的终端bash绑定到当前在终端,这样就可以直接在容器的bash中进行操作

  • 创建容器,docker create,例如:docker create -ti ubuntu ;使用docker create命令创建的容器处于停止状态,可使用docker start命令启动它
  • 新建并启动容器,docker run ,比如docker run ubuntu /bin/echo "hello world",相当于先执行docker create,再执行docker start
  • docker run --name '容器名称' -ti ubuntu bash
  • 创建实例命令格式最后的一个参数,不一定是bash,它是指定创建实例后要执行的命令,命令执行后会终止容器
  • docker run -ti ubuntu bash ;-t让docker分配一个伪终端并绑定到容器的标准输入上;-i 让容器的标准输入保持打开。在交互模式下,用户可以通过所有创建的终端来输入命令,exit命令退出容器。退出后,容器自动终止终端
  • 使用-d可以让容器运行在后台;docker run -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done",如果不加-d,命令会在当前窗口打印出运行结果,且不能ctrl+c停止程序,一停止容器就停止了
  • docker logs 来查看日志,可以知道容器是否正常运行
  • docker stop 终止容器,当容器中应用终结时,容器也会自动停止
  • 查看所有的容器 docker ps -a
  • 查看运行的容器 docker ps
  • 重新启动容器 docker restart [OPTIONS] CONTAINER [CONTAINER...]
  • 通过-d选项创建的后台运行容器,没有操作界面,可以使用exec来进入后台运行的容器进行操作,且exit退出后,容器不停止

docker exec -ti containerid/name bash

  • docker rm可以删除终止状态的容器,如果要删除运行状态的容器,需要强制终止,docker rm -f 命令
  • 删除、停止等操作容器时,使用 id和name都可以
  • 导出容器是指导出一个已经创建的容器到一个文件,不管容器是否处于运行状态;docker export filename.tar
  • 导出的文件可以使用docker import命令导入,成为镜像。cat test.tar | docker import - imagename

数据卷

创建数据卷

使用docker run命令时,使用-v选项可以在容器内创建一个数据卷,并且可以指定挂载一个本地已有的目录到容器中作为数据卷。这是一种常用的做法,但不是说容器卷必须和本地目录挂载。可以只在容器中创建数据卷。
是容器中的目录叫数据卷,而不是外面的。容器中的目录不存在则会自动创建。
docker run -d --name app1 -ti -v $(pwd)/webapp:/root/webapp ubuntu bash
上述命令是把本地的当前目录的webapp和容器内的/root/webapp目录进行挂载,创建数据卷。这样就相当于把外部的目录和内部的目录做了一个映射,两面的内容是完全一样的,无论在里面还是外面更改目录内容,则都可以看到。

数据卷默认是读写rw权限,加上ro选项可设置成只读权限
docker run -d --name app1 -ti -v $(pwd)/webapp:/root/webapp:ro ubuntu bash

数据卷容器

数据卷容器用于用户需要在容器间共享一些持续更新的数据,数据卷容器专门提供数据卷供其他容器挂载使用。

创建数据卷容器db1

docker run -d --name db1 -v /dbdata -ti ubuntu bash

db1容器中把根目录下的dbdata目录创建数据卷dbdata

创建容器db2与db1共享dbdata的数据

docker run -d --name db2 --volumes-from db1 --ti ubuntu bash
在创建db2容器时,db2中会自动有和db1一样路径的数据卷。
这样两个容器中的无论谁更改了数据卷的内容,则都可以直接看到。
数据卷容器共享可以和上面提到的和本地目录挂载结合使用,在创建数据卷容器db1时,和本地目录挂载,这样两个的优点就结合起来了(已验证可行)。

数据卷容器的删除

当有多个容器共享数据卷时,删除其中任意一个,对数据卷都没影响,如果数据卷和本地目录进行了映射,那么即使删除所有的数据卷容器,本地的目录不受任何影响。

利用数据卷容器迁移数据

可以利用数据卷容器对其中的数据进行备份、恢复,以实现数据迁移。

备份:

使用下面的命令备份dbdata数据卷容器内的数据卷:

docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu 
tar cvf /backup/backup.tar /dbdata

说明
利用ubuntu镜像创建一个容器worker。使用--volumes-from dbdata 参数来让worker容器挂载dbdata的数据卷;使用$(pwd):/backup参数来挂载本地目录到worker容器的/backup目录。worker成了一个双数据卷容器,自身创建的一个和从dbdata共享的一个。然后把dbdata数据卷备份到自己的数据卷中。
worker启动后,使用tar命令将/dbdata下的内容备份为容器内的/backup/backup.tar.

恢复数据卷

如果数据卷容器和本地目录进行了挂载,则直接对本地目录进行打包、解压,然后在新的容器中挂载就行。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读