Docker容器基础操作

Docker简介:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。


一个完整的Docker有以下几个部分组成:
dockerClient客户端;
Docker Daemon守护进程;
Docker Image镜像;
DockerContainer容器。


Docker 架构:
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器;
Docker 容器通过 Docker 镜像来创建;
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。
Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。
Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。
客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。


Docker安装:
###镜像里面默认是没有Docker的软件包的,需要联网yum安装###

[root@docker ~]# yum -y install docker			#安装docker容器
[root@docker ~]# systemctl enabled docker		#配置开机自启
[root@docker ~]# systemctl start docker		#启动docker服务
[root@docker ~]# docker version				#查看版本

*docker镜像操作:

[root@docker ~]# docker search [dhcp]							#搜索镜像
[root@docker ~]# docker pull [docker.io/networkboot/dhcpd]	#下载镜像
[root@docker ~]# docker images [?]							#查看已有的仓库
[root@docker ~]# docker inspect [镜像ID号]						#获取镜像的详细信息
[root@docker ~]# docker tag [镜像] [新名称]					#添加新的标签
[root@docker ~]# docker rmi [标签]/[仓库]						#删除镜像或仓库
[root@docker ~]# docker save -o [本地路径] [镜像名] 			#存出镜像到本地	
#以下操作需要到官网注册账号#
[root@docker ~]# docker load --input [本地存储的镜像]			#载入公共镜像到库
[root@docker ~]# docker push [本地镜像]						#上传镜像到公共库(需联网)

*docker容器操作:

[root@docker ~]# docker create [选项] 镜像运行的程序 /bin/bash	#创建新容器
		【选项】:
		   -it:让容器的输入保持打开,让Docker分配一个伪终端
	
[root@docker ~]# docker ps -a						#查看容器的运行状态
			-a:可以显示最近一次启动的容器

[root@docker ~]# docker start [容器ID]					#运行该容器
[root@docker ~]# docker run [镜像] /bin/bash			#创建并运行该容器
[root@docker ~]# docker stop [容器ID]					#停止该容器
[root@docker ~]# docker exec -it [容器ID] /bin/bash		#进入该容器
[root@docker ~]# docker export [容器ID]>[文件名]		#将该容器导出到该文件中
[root@docker ~]# cat [文件名] | docker import - [标签名]	#将文件保存的容器导入到新容器	
[root@docker ~]# docker rm [容器ID]					#删除该容器

*docker容器资源控制:
1.—CPU—

[root@docker ~]# echo 20000 >/sys/fs/cgroup/cpu/sstem.slice/docker-[容器ID].scope/cpu.cfs_quota_us	#限制cpu使用率为20%

[root@docker ~]# docker run -tid--cpu-shares 1024 [镜像A]	#此为创建加运行	
[root@docker ~]# docker run -tid--cpu-shares 2048 [镜像B]
			#容器A,B占CPU比例为1:2

[root@docker ~]# docker run -tid--cpuset-cpus 0,1,2,3,4 [镜像名]				#限制CPU内核的使用

2.—内存—

[root@docker ~]# docker run -tid -m 512MB [镜像名]		#创建运行内存为512MB的容器并运行

3.—限制磁盘写入速度—

[root@docker ~]# docker run -tid--device-write-bps /dev/sda:1MB [镜像名]

*docker镜像的创建方法:
1.—基于已有的镜像创建—

[root@docker ~]# docker commit -m "newdhcp" -a "benet" 9c8959e4f0d1 docker:mydhcp
		docker commit [选项] [容器ID] [仓库名称]:[标签]
		选项:
			-m:说明信息
			-a:作者
			-p:生成过程中停止容器的运行

2.—基于本地模板创建—
#模板可在“httpd://openvz.org/Fownload/template/precreated”下载

[root@docker ~]# wget httpd://.........tar.gz
[root@docker ~]# cat .....tar.gz | docker import -daoke:new

3.—基于Dockerfile创建—
###首先你要下载好基础镜像centos,可以用之前的命令查找镜像下载镜像###

 [root@docker ~]# vim Dockerfile
    	#第一行指明基于的基础镜像
    	From centos
    	#维护该镜像的用户信息
    	MAINTAINER The CentOS Project <cloud-ops@centos.org>
    	#镜像操作指令
    	RUN yum -y install update
    	RUN yum -y install openssh-server
    	RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
    	RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
    	RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
    	#开启22号端口
    	EXPOSE 22
    	#启动容器时执行指令
    	CMD ["/usr/sbin/sshd","-D"]

Dockerfile操作指令:

	-FROM 镜像					---指定新镜像所基于的镜像,第一条指令必须为FROM指令(必须写的)
	-MAINTAINER 名字			---说明镜像维护人信息
	-RUN 命令					---在所基于的镜像上执行命令,并提交到新的镜像
	-CMD["要运行的程序","参数1","参数2"]	---指令启动容器时要运行的命令或者脚本,Dockerfile中只能有一条CMD命令
	-EXPOSE 端口号				---指定新镜像加载到Docker时要开启的端口
	-ENV 环境变量变量值			---设置一个环境变量的值,会被后面的RUN用到
	-ADD 源文件/目标文件/目录		---将源文件复制到目标文件,源文件要与Dockerfile在相同的目录
	-COPY 源文件/目录目标文件/目录		---将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录
	-VOLUME["目录"]				---在容器中创建一个挂载点
	-USER 用户名/UID			---指定运行容器时的用户
	-WORKDIR 路径				---为后续的RUN,CMD,ENTRYPOINT指定工作目录
	-ONBUILD 命令				---指定所在生成的镜像作为一个基础镜像时所需要运行的命令

案例:

构建Nginx容器

[root@docker ~]# docker search centos					#先查找基础镜像centos
[root@docker ~]# docker pull docker.io/centos			#下载centos镜像
[root@docker ~]# mdkir nginx							#创建工作目录
[root@docker nginx]# cd nginx					
[root@docker nginx]# docker pull centos				#下载centos镜像
[root@docker nginx]# vim Dockerfile					#创建Dockerfile文件
#设置基础镜像centos
From centos
#维护该镜像的用户信息
MAINTAINER The CentOS Project <cloud-ops@centos.org>
#安装相关依赖包
RUN yum -y install wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel
RUN wget http://nginx.org/download/nginx-1.9.7.tar.gz
RUN tar -zxvf nginx-1.9.7.tar.gz
#编译安装Nginx
WORKDIR nginx-1.9.7
RUN ./configure --prefix=/usr/local/nginx && make && make install
#开启80和443号端口
EXPOSE 80
EXPOSE 443
#修改Nginx配置文件,以非daemon方式启动
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
#将执行的脚本复制到镜像中,并赋予权限
WORKDIR /root/nginx
ADD run.sh /run.sh
RUN chmod 775 /run.sh
#启动容器时执行指令
CMD ["/run.sh"]
:wq!
[root@docker nginx]# vim run.sh									#创建run.sh执行脚本文件
#!/bin/bash
/usr/local/nginx/sbin/nginx
:wq!
[root@docker nginx]# docker build -t nginx:wyjx .					#生成镜像

[root@docker nginx]# docker run -d -P nginx:wyjx						#启动容器
			-P:为指定容器端口映射到宿主机上的随机端口
			-p:为指定容器端口映射到宿主机上的指定端口(宿主机端口号在前,容器端口号在后)
			例如: -p 80:8080
			
[root@docker ~]# docker ps -a 										#查看运行状态
#用网页访问本机的32769端口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值