随笔- 310  文章- 1  评论- 0  阅读- 86009 

安装

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

基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
#添加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   boye169  阅读(190)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示