zoukankan      html  css  js  c++  java
  • docker基本操作

    安装

    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
    

      

      

  • 相关阅读:
    JQuery UI
    JQuery 插件
    JQuery Ajax
    varchar和Nvarchar区别
    git冲突解决
    jquery ajax 提交信息后等待返回的提示信息
    Oracle错误 ORA-12560如何解决
    putty ssh连接老断
    myeclipse操作记录
    HTML与HTML5笔记
  • 原文地址:https://www.cnblogs.com/boye169/p/14444068.html
Copyright © 2011-2022 走看看