安装
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