安装

CentOs7安装docker】
[查看系统版本] cat /etc/redhat-release
[安装docker失败后使用此命令] yum install libdevmapper* -y
[安装docker] yum install docker
[查看docker安装是否成功] docker -v
[配置下载源]vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

【ubuntu14.04安装docker】
sudo apt-get install docker.io [安装]
sudo service docker restart
sudo service docker start
创建软连接
ln -sf /usr/bin/docker.io /usr/local/bin/docker
【window下安装docker】
http://get.daocloud.io/(DockerToolbox)
教程:https://www.jianshu.com/p/3e1297879a16
1.启动,运行Kitematic (Alpha)
2.打开终端Docker Quickstart Terminal
3.创建“default”虚拟机:docker-machine create --driver virtualbox default
4.显示搭建”default”虚拟机的需要的指令:docker-machine env default
5.连接至”default”虚拟机:eval "$(docker-machine env default)"
6.验证是否成功:docker run hello-world

基本命令

#添加docker用户组	
sudo groupadd docker [su - root ;groupadd docker]
		
#将test用户添加到用户组	
sudo gpasswd -a test docker

#切换当前会话到新 group 	
newgrp - docker

#Docker系统信息	
docker info

#重新启动docker    
service  docker restart	

#启动docker		
service docker start

#停止docker		
service docker stop

#开机启动
systemctl enable docker.service

开机启动
#chkconfig docker on 

#查看docker运行情况
ps -ef|grep docker 
	
#查看docker版本
docker version 	
				
#查看正在运行容器
docker ps 

#查看最新容器
docker ps -l

#查看所有容器
docker ps -a

#查看容器端口映射
docker port 容器名

#启动python容器
docker -it  run --name py3 python3:v1 python

#启动容器
docker run learn/tutorial  echo 'start'
 
#启动nginx
docker run  --name ng -d -p 8000:80 docker.io/nginx

#自定义容器名
docker run -it --name=ubu1 ubuntu:v3 /bin/bash
  --name  自定义容器名
  -i --interactive=ture|false 默认是false [始终打开标准输入]
  -t --tty=true|false 默认false	[分配伪ttp终端]

#启动后使用Ctrl+P Ctrl+Q以守护形式运行容器
docker run -i -t ubuntu bin/bash
				
#附加到运行中的容器
docker attach 容器id或容器名 
	
#停止守护式容器
docker stop 容器名 
	
#停止守护式容器	
docker kill 容器名
	
#后台运行容器
docker run --name dc1 -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done" 
	-d 以后台的形式运行

#在运行容器内启动新进程
docker exec -it py_poc /bin/sh 
                        
#查看运行容器中运行的进程	
docker top dc1 
 	
#查看容器详细信息
docker inspect 容器id或容器名	

#查看容器内部运行情况	
docker logs [-f] [-t] [--tail] 容器名
    -t 显示日志时间
    -f	查看日志更新状态
    --tail 10 显示最后10条

#重新启动停止的容器
docker start [-i] 容器id或容器名
		
#删除停止的容器			
docker rm 容器名

#删除正在运行的容器
docker rm -f 容器名

#安装ping命令
docker run learn/tutorial apt-get install -y ping

#连接多个容器	
docker run -it -p 8888:8080 --name perlv3 --link mysqlv3:mysql --link oraclev3:oracle 
-d -v /home/share/RUNNING/:/home/share/RUNNING 10.1.101.59:5000/perl:v3
	--link<容器名称>:<别名>

#查看镜像的创建历史
docker history 203.75.156.57:5000/tornado:v1.21

#查找镜像
docker search ubuntu 	
	
#下载镜像
docker pull ubuntu:latest[sudo docker pull <镜像名称>:<标签> latest为最新版本]
	
#查看镜像
docker images 

#给镜像打标签
docker tag ubuntu:15.10 runoob/ubuntu:v3
	
#删除镜像
docker rmi 镜像名或id

#docker镜像的导入和导出
docker save -o gitlab.tar.gz sameersbn/gitlab
docker load < gitlab.tar.gz
	
#提交镜像到仓库	docker push learn/ping 
docker -H tcp://192.267.156.56:38794 run -e constraint:node==204-89-16-89.HINET-IP.hinet.net

客户端通过指定IP和端口访问服务端 docker -H IP:PORT
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 
-d, --detach=false         指定容器运行于前台还是后台,默认为false     
-i, --interactive=false   打开STDIN,用于控制台交互    
-t, --tty=false            分配tty设备,该可以支持终端登录,默认为false    
-u, --user=""              指定容器的用户    
-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不能被代理 
【mysql】
	#docker pull mysql:5.6
	#docker run -p 3306:3306 --name mymysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
	
	#docker run -p 3306:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
	#docker exec -it mymysql /bin/bash
	# mysql -u root -p
	
	-p 3306:3306:将容器的3306端口映射到主机的3306端口
	-v $PWD/conf/my.cnf:/etc/mysql/my.cnf:将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf
	-v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs
	-v $PWD/data:/mysql_data:将主机当前目录下的data目录挂载到容器的/mysql_data
	-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
【redis】
	 #docker run -p 6379:6379 -v $PWD/data:/data  -d redis:3.2 redis-server --appendonly yes
	 #docker exec -it 43f7a65ec7f8 redis-cli
	-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
	-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
	redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
【python】
Dockerfile
	FROM frolvlad/alpine-python3
	RUN  pip install tornado
	RUN  pip install pymysql
	RUN  pip install requests
	RUN  pip install bs4
	WORKDIR /home/AF
	EXPOSE 8080
	ENTRYPOINT ['python']
	CMD ["/home/AF/app.py"]

#docker build -t "tornado" --no-cache .
#docker run -v /root/.jenkins/workspace/tornado/:/home/AF/ --name=tornado -p 8080:8080 -d tornado python /home/AF/app.py
【python-tensorflow】
#docker search python3+tensorflow
#docker pull feisan/alpine-python3-tensorflow
#vi Dockerfile
	FROM feisan/alpine-python3-tensorflow
	MAINTAINER  "liboye@youbesttech.com"
	LABEL version="1.0.0" type="tensorflow"
	ENV REFRESH_DATE 2018-04-12
	ENV TZ "Asia/Shanghai"
	ENV PYTHONPATH /home/tf  #物体检测
	ENV PYTHONPATH /home/tf/slim:$PYTHONPATH #物体检测
	RUN  pip install slim  #物体检测
	RUN  pip install numpy
	RUN  pip install matplotlib
	WORKDIR /home/tf
	EXPOSE 6006
#docker build -t "python3_tensorflow" --no-cache .
#docker run -v /home/batch/share/project/tf:/home/tf --name=tf python3_tensorflow python /home/tf/tf001.py
#docker run -v /home/batch/share/project/tf:/home/tf --name=tfboard -p 6006:6006 -d  
#python3_tensorflow tensorboard --logdir=/home/tf/logs
#docker tag python3_tensorflow 203.75.156.57:5000/python3_tensorflow:v1
#docker push 203.75.156.57:5000/python3_tensorflow:v1
#docker build -t tf_objection . [物体检测]
#docker run -it -v /root/.jenkins/workspace/python_tensorflow:/home/tf  --name tf_obj_detect  tf_objection python /home/tf/object_detection_api.py  [物体检测]
【 Portainer】
参考:https://blog.csdn.net/fundebug/article/details/70213275
	它提供了图形化界面用于管理Docker主机和Swarm集群。如果使用Portainer管理本地
	Docker主机的话,需要绑定/var/run/docker.sock:
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

【端口映射】
	[-P随机映射端口号]	docker run -P -d --name mynginx1 nginx
	[指定端口映射(宿主机端口:容器端口)] 	docker run -d -p 9000:80 --name  mynginx2 nginx
【通过Dockerfile构建镜像】	
	#mkdir -P dockerfile/df_test [创建目录]
	#cd dockerfile/df_test
	#vim Dockerfile
		#Dockerfile注释
		FROM ubuntu:14.04
		MAINTAINER dormancypress "boye@outlook.com"
		LABEL version="1.0.0" type="Autoplate"
		ENV REFRESH_DATE 2017-12-16
		ENV UPD_DATE 2017-12-01
		ENV TZ "Asia/Shanghai"
		COPY index.htm /index.html
		RUN apt-get update
		RUN apt-get install -y nginx
		#RUN apt-get update &&  apt-get install -y nginx
		ENV PATH /usr/local/nginx/sbin:$PATH
		ONBULID COPY index.html /usr/share/nginx/html/
		EXPOSE 80 #指定运行该镜像的容器使用的端口
		
#docker build -t='dockerfile/df_test' --no-cache . [构建镜像,指定生成镜像名及路径,--no-cache:不使用缓存]
#docker run -p --name test -d dockerfile/df_test	[运行镜像]
#docker history dockerfile/df_test 				[查看镜像的构建过程]
	
	[Dockerfile指令]
	FROM <images>:<tag> [基础镜像,必须是第一条非注释指令]
	MAINTAINER <name> 	[指定镜像的作者信息,包含镜像的所有者和联系信息]
	RUN ["executable","param1","param2"](exec模式) [在容器构建过程中执行命令]
		command param1 param2 (shell模式)
	CMD ["executable","param1","param2"](exec模式)[指定容器运行时的默认命令,会被docker启动命令覆盖]
		command param1 param2 (shell模式)
	ENTRYPOINT (也有两种模式)[与CMD类似,docker启动时需要使用--entrypoint选项 该命令才被覆盖]
	COPY <src(相对路径)> <dest(绝对路径)>[将文件复制到Dockerfile构建的镜像中]
	ADD <src> <dest>  [与COPY类似,ADD包含类似tar的解压功能]
	VOLUMN["/data"] [向基于镜像创建的容器添加卷]
	WORKDIR /path/to/workdir(绝对路径) [在容器内部创建工作目录]
	ENV <key> <value> [创建环境变量] 
	USER daemon		[指定镜像运行的身份]
	ONBULID [INSTRUCTION] [镜像触发器,当一个镜像被其它镜像作为基础镜像时
	执行会在构建过程中插入指令]
【使用现有容器生成新的镜像】
	docker commit -a "boye" -m "20180403" ng nginx:v1
	docker commit <选项><容器名称,ID><注册名称> <镜像名称>:<标签>
	-a:设置镜像创建者有关信息
	-m:日志信息
【私有仓库】
	docker pull registry
	docker run -d -p 5000:5000 registry
	docker tag centos:latest 203.75.156.57:5000/centos:v3
	docker tag nginx:v1 127.0.0.1:5000/nginx:v2
	docker push 203.75.156.57:5000/centos:v3
	docker pull 203.75.156.57:5000/centos:v3
	[修改配置文件]
	
	 
	#vi /lib/systemd/system/docker.service
	(1)#ExecStart=/usr/bin/dockerd -H fd:// -s overlay2  --dns 10.xx.xxx.xx --dns 8.8.8.8 --insecure-registry 10.27.168.88:5000
	(2)#ExecStart=/usr/bin/docker -d -H fd:// -H tcp://0.0.0.0 $DOCKER_OPTS

	其中--dns 10.xx.xxx.xx是公司内网的dns服务器
	#systemctl daemon-reload
	#systemctl restart docker
	
【Docker容器与外部网络连接】
	ps -ef | grep docker[查看docker是否运行]
	sysctl net.ipv4.conf.all.forwarding [查看ip forward默认值为--ip-forward = true]
	sudo iptables -t filter -L -n [查看filter表]
	sudo iptables -I DOCKER -s 10.211.55.3 -d 172.17.0.7 -p TCP --dport 80 -j DROP [禁止指定ip访问指定容器]
【数据卷】
	docker run -it -v ~/datavolume:/data ubuntu /bin/bash [创建数据卷datavolume为宿主机目录,data 容器下目录]
	docker run -it -v ~/datavolume:/data:ro --name do1 ubuntu /bin/bash [设置容器访问权限]
	docker run -it -v /home/boye/test:/data --name cs --privileged=true ubuntu /bin/bash
【数据卷容器】
	docker run -it --name dvt5 --volumes-from dvt4 ubuntu /bin/bash 
【数据备份】
	docker run --volumes-from dvt5 -v ~/backup:/backup:wr --name dvt10
	ubuntu tar cvf /backup/dvt5.tar /datavolume1[将dvt5容器的backup目录备份本地backup目录]	

【问题】
1.docker启动失败:Job for docker.service failed because the control process exited with error code.
   See "systemctl status docker.service" and "journalctl -xe" for details	
   解决:
   1)
    #vi /lib/systemd/system/docker.service
		将 ExecStart=/usr/bin/dockerd -H fd:// 改成 ExecStart=/usr/bin/dockerd -H fd:// -s overlay2 
	#systemctl daemon-reload
	#systemctl restart docker
	2)
	  #rm -rf /var/lib/docker
	  #service docker start

	Error response from daemon: v1 ping attempt failed with error: Get https://192.168.227.129:5000/v1/_ping
	https://www.tianmaying.com/tutorial/docker-registry
2.docker 上传到镜像仓库时错误提示 
	Get https://10.100.50.120:5000/v1/_ping: http: server gave HTTP response to HTTPS client
	解决方案:
	修改 /etc/default/docker 或 /etc/sysconfig/docker文件,并重新启动docker服务
		ADD_REGISTRY='--add-registry 192.168.227.130:5000'  
		DOCKER_OPTS="--insecure-registry 192.168.227.130:5000"  
		INSECURE_REGISTRY='--insecure-registry 192.168.227.130:5000'
	#sudo service docker restart  重启docker

  

  

 posted on 2021-02-24 22:01  boye169  阅读(165)  评论(0编辑  收藏  举报