安装
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
浙公网安备 33010602011771号