【整理】【docker学习基本知识1】

基于前人文章的整理,原文链接见文章内说明

docker-io, docker-engin 是以前早期的版本,版本号是 1.*,

默认centos7 安装的是docker-io,最新版是 1.13。

docker-ce 是社区版本,适用于刚刚开始docker 和开发基于docker研发的应用开发者或者小型团队。

Ubuntu默认安装的是docker-ce.docker-ee 是docker的企业版,适用于企业级开发,同样也适用于开发、分发和运行商务级别的应用的IT 团队。

docker-ce 和docker-ee 的可用版本是根据year-month 来的.

————————————————

原文链接:https://blog.csdn.net/the_fool_/article/details/82744127

基本概念主要有三个:

镜像(Image)   

● 一个只读的模板,镜像可以用来创建 Docker 容器   

● 用户基于镜像来运行自己的容器。镜像是基于 Union 文件系统的层式结构   

● 可以简单创建或更新现有镜像,或者直接下载使用其他人的。可以理解为生成容器的『源代码』

容器(Container)   

● 容器是从镜像创建的运行实例,在启动的时候创建一层可写层作为最上层(因为镜像是只读的)   

● 可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台   

● 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序

仓库(Registry)   

● 集中存放镜像文件的场所,可以是公有的,也可以是私有的   

● 最大的公开仓库是 Docker Hub   

● 国内的公开仓库包括 Docker Pool 等   

● 当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了   

● Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务

 

Docker 采用的是客户端/服务器架构,客户端只需要向 Docker 服务器或守护进程发出请求即可完成各类操作。那么问题来了,我们能用 Docker 来做什么呢?我们可以:

● 统一、优化和加速本地开发和构建流程

● 保证不同的环境中可以得到相同的运行结果

● 创建隔离环境用于测试Docker 可以提供的隔离有:

● 文件系统隔离:每个容器都有自己的 root 文件系统

● 进程隔离:每个容器都运行在自己的进程环境中

● 网络隔离:容器间的虚拟网络接口和 IP 地址都是分开的

● 资源隔离和分组:使用 cgroups 将 CPU 和内存之类的资源独立分配给每个 Docker 容器

docker容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一个容器。这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。

 

  1. 通过 uname -r 命令查看你当前的内核版本(必须高于3.10)
  2. 更新yum源:sudo yum update

yum update:升级所有包同时也升级软件和系统内核

yum upgrade:只升级所有包,不升级软件和系统内核

将升级的内核回退(CentOS7.7 回退到原来的7.5):

cat /boot/efi/EFI/centos/grub.cfg|grep menuentry

grub2-set-default 'CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)'

grub2-editenv list

  1. 卸载旧版本:sudo yum remove docker docker-common docker-selinux docker-engine
  2. 依赖包安装:sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. 添加yum源:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  4. 查看版本库: yum list docker-ce --showduplicates | sort -r
  5. 安装:sudo yum install docker-ce
  6. 启动并开机启动:sudo systemctl start docker   sudo systemctl enable docker
  7. 查看是否安装成功:docker version

 

查看是否安装成功

yum list installed | grep docker

查看是否启动成功

systemctl status docker

使用docker命令,查看docker已经安装的镜像

docker images

显示docker系统的信息  

docker info  

 

官方地址为国外地址安装缓慢: https://hub.docker.com/_/centos 

国内地址:http://mirrors.ustc.edu.cn/centos/

修改镜像文件拉取地址为ustc

vi /etc/docker/daemon.json {"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}

 

查找docker镜像示例:

docker search centos

docker search ubuntu

docker search windows

docker search wine

docker search arm

docker search python

docker search dpdk

docker search pktgen

docker search cuda

docker search tensorflow

 

使用docker pull 拉取docker 仓库中centos镜像

docker pull centos

docker pull ubuntu

docker pull tensorflow/tensorflow

 

使用docker命令,查看docker已经安装的镜像

docker images

启动一个容器

docker run -i -t ubuntu /bin/bash

删除一个容器

docker rm <CONTAINER ID>

显示一个镜像的历史

docker history  centos

删除一个或者多个镜像

docker rmi image_name

# 列出当前所有正在运行

container  $docker ps  

# 列出所有的

container  $docker ps -a  

# 列出最近一次启动的

container  $docker ps -l  

# 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message

$docker commit ID new_image_name

image相当于类,container相当于实例,不过可以动态给实例安装新软件,然后把这个containercommit命令固化成一个image

 

# 在容器中运行"echo"命令,输出"hello word"

$docker run image_name echo "hello word"

# 交互式进入容器中

$docker run -i -t image_name /bin/bash

# 在容器中安装新的程序

$docker run image_name apt-get install -y app_name

 

docker run命令行参数解析

-a, --attach=[] 登录容器(必须是以docker run -d启动的容器)

-w, --workdir="" 指定容器的工作目录

-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用

-e, --env=[] 指定环境变量,容器中可以使用该环境变量

-m, --memory="" 指定容器的内存上限

-P, --publish-all=false 指定容器暴露的端口

-p, --publish=[] 指定容器暴露的端口

-h, --hostname="" 指定容器的主机名

-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录

--volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录

--cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities

--cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities

--cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法

--cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU

--device=[] 添加主机设备给容器,相当于设备直通

--dns=[] 指定容器的dns服务器

--dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件

--entrypoint="" 覆盖image的入口点

--env-file=[] 指定环境变量文件,文件格式为每行一个环境变量

--expose=[] 指定容器暴露的端口,即修改镜像的暴露端口

--link=[] 指定容器间的关联,使用其他容器的IP、env等信息

--lxc-conf=[] 指定容器的配置文件,只有在指定

--exec-driver=lxc时使用

--name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字

--net="bridge" 容器网络设置: bridge 使用docker daemon指定的网桥 host //容器使用主机的网络 container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源 none 容器使用自己的网络(类似--net=bridge),但是不进行配置

--privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities

--restart="no" 指定容器停止后的重启策略: no:容器退出时不重启 on-failure:容器故障退出(返回值非零)时重启 always:容器退出时总是重启

--rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)

--sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

————————————————

版权声明:本文为CSDN博主「jigetage」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/jigetage/article/details/91438990

docker run 

案例1、运行一个简单的容器,其中需要包含控制台管理

[[email protected] ~]#docker run -i -t centos6.8

这个容器一执行就会进入到默认的线程”/bin/bash”,直接进入控制台操作。当退出控制后后,容器会被终止。

案例2、运行一个在后台执行的容器,同时,还能用控制台管理

[[email protected] ~]#docker run -i -t -d centos6.8

这个容器一执行,会自动执行默认的线程”/bin/bash”,但是不会让你马上进入控制台操作。将会在后台执行,用docker ps 可以看到当前运行的控制台。进入容器可是使用docker attach“container name or id”。

案例3、运行一个带命令在后台不断执行的容器,不直接展示容器内部信息

[[email protected] ~]#docker run -d centos6.8  ping www.docker.com
这个容器将永久在后台执行,因为ping这个线程不会停止。除非你停止了ping的线程。

案例4、运行一个在后台不断执行的容器,同时带有命令,程序被终止后还能重启继续跑,还能用控制台管理

[[email protected] ~]#docker run -d --restart=always centos6.8  ping www.docker.com
这个容器将永久在后台执行,因为ping这个线程不会停止。如果你把ping这个线程终止了,那么容器会重启继续执行ping功能

案例5、我们需要为容器指定一个名称

[[email protected] ~]#docker run -d --name=server-dbcentos6.8-mysql /usr/bin/mysql_safe -d
这时候我们这个容器的名称为server-db,同时激活了数据库mysql的后台线程,让它不断的跑,这时候我们的容器也不会被关闭。

案例6、我们需要让server-http容器连接server-db容器

[[email protected] ~]#docker run -d --name=server-http --link=server-db  centos6.8-httpd /usr/bin/httpd --DFOREGROUND
这时候,我们执行了apache的服务器让它不断的在后台执行,同时,在php里配置mysql的服务器名称为”server-db”,直接用server-db命名就可以了。不需要输入ip地址之类的。我们的server-http指定连接了server-db。server-db在server-http里会被当做一个DNS解析来获取相应的连接ip。

案例7、我们要将server-db,server-http的端口暴露出去,让大家访问

[[email protected] ~]#docker run -d --name=server-db -p 3306:3306 centos6.8-mysql /usr/bin/mysql_safe –d
这时候我们指定了服务器宿主机的3306端口映射到容器的3306端口,暴露出去。

[[email protected] ~]#docker run -d --name=server-http --link=server-db  -p 8080:80centos6.8-httpd /usr/bin/httpd --DFOREGROUND

这时候我们指定了服务器宿主机的8080端口映射到容器80端口,暴露出去。

案例8、我们要将宿主机的数据库目录/server/mysql-data挂载到server-db上

[[email protected] ~]#docker run -d --name=server-db -p 3306:3306 -v /server/mysql-data:/mysql-data centos6.8-mysql /usr/bin/mysql_safe –d
这时候,你会发现,在server-db根目录下你会发现有一个新的文件夹mysql-data,同时里面的文件内容和宿主机下/server/mysql-data一样。

案9、我们希望一个容器在它的进程结束后,立马自动删除。

[[email protected] ~]#docker run -it --rm  centos6.8
这时候我们进入了容器的控制台,当我们在容器内部exit退出控制台的时候,容器将被终止,同时自动删除。 
--------------------- 
作者:lynk-coder 
来源:CSDN 
原文:https://blog.csdn.net/kunloz520/article/details/53839237 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章