# 经验汇集 ## 常用指令 ### Docker相关 ``` 启动 systemctl start docker 守护进程重启 sudo systemctl daemon-reload 重启docker服务 systemctl restart docker 重启docker服务 sudo service docker restart 关闭docker service docker stop 关闭docker systemctl stop docker ``` ``` docker network ls docker network rm 【网络名称】 docker inspect 【容器id/名称】 docker logs -f -t --since="2017-05-31" --tail=10 【容器名称】 #动态查看容器日志 docker logs -f -t --tail=10 【容器名称】 #动态查看容器日志 ``` **基础操作: ** 1 **docker images** 查看镜像信息列表 镜像是静态的 2 **docker ps -a** 查看运行中的所有容器 3 **docker pull [images]:[version]**从dockerhub拉取指定镜像 4 **docker run -p 8000:80 -tdi --privileged [imageID] [command]** 后台启动docker,并指定宿主机端口和docker映射端口。 **-i:**以交互模式运行容器,通常与 -t 同时使用; **-d:**后台运行容器,并返回容器ID; **-t:**为容器重新分配一个伪输入终端,通常与 -i 同时使用; **--privileged** 容器将拥有访问主机所有设备的权限 通常情况下 [command] 填下 **/bin/bash** 即可。 特殊情况下,如需要在centos镜像中使用**systemctl** . 则应添加**--privileged** 并设置[command ]为 **init**。 5 当镜像通过run 启动后,便会载入到一个动态的container(容器)中运行,此时若需要进入终端交互模式: **sudo docker exec -it [containerID] /bin/bash** 交互模式中,使用 ctrl+p+q退出交互 保持运行,使用 exit命令退出并停止容器。 6 在容器非交互模式下,通过docker start/stop 命令来启动/停止已部署的容器服务。 7 **docker rm [containerID]** 删除容器 8 **docker rmi [imageID]** 删除镜像 9 **docker cp [YourHostFilePath] [containerID]:[DockerPath]** 将宿主机内的指定文件传输至容器内部的指定地址。 **镜像制作:** 1 **docker commit [containerID] [ImageName]:[Version]** 将修改后的容器重新打包成镜像 2 **docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1** 将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。 **-a** :提交的镜像作者; **-c** :使用Dockerfile指令来创建镜像; **-m** :提交时的说明文字; **-p** :在commit时,将容器暂停。 3 **docker push [ImageID] [repertory_address]**提交镜像到云仓库 作者:爱睡觉的树 链接:https://www.jianshu.com/p/a84e8cf33b34 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ### Linux ``` history #查看历史执行命令 tail -n 20 【文件名】#查看文件的后20行 du -sh * #查看目录下的磁盘占用情况 du -sh * | sort -nr #如上,并排序 df -h 查看磁盘空间大小 top #linux版本的任务管理器 chmod u+x ./*.sh chmod是权限管理命令change the permissions mode of a file的缩写。。 u代表所有者,x代表执行权限。 + 表示增加权限。 chmod u+x file.sh 就表示对当前目录下的file.sh文件的所有者增加可执行权限。 a+x 是给所有人加上可执行权限,包括所有者,所属组,和其他人 o+x 只是给其他人加上可执行权限 ``` ### ### Vim ``` history #查看历史执行命令 tail -n 20 【文件名】#查看文件的后20行 ``` ## 坑记 ### Nginx #### 请求大小限制 在http 的 server 节点中添加`client_max_body_size`。参见https://blog.csdn.net/yedajiang44/article/details/99294216 #### Nginx开启gzip 参考:https://blog.csdn.net/bigtree_3721/article/details/79849503 ### 未分类 #### 域名解析 域名解析做完整。如果要给ycmusic.cn配证书,不要忘记相应添加域名解析。可以参考: 如何解析设置域名添加www和不添加www都能够访问 *来自 <*[*https://jingyan.baidu.com/article/6d704a130c6d0d28db51ca3c.html*](https://jingyan.baidu.com/article/6d704a130c6d0d28db51ca3c.html)*>* #### 文本格式导致的脚本执行错误问题 注意在windows下编辑的文本格式是dos格式,需要改成unix格式才能作为sh脚本在linux下执行。否则,会出现诸如: bin/bash^M: bad interpreter: No such file or directory 参考[*https://blog.csdn.net/helloxiaozhe/article/details/90347064解决*](https://blog.csdn.net/helloxiaozhe/article/details/90347064) 另外,可以采用vs的编码保存,其中指定行尾设置 #### Let's Encrypt可以添加--dry-run参数来验证运行 例如: docker-compose run --rm --entrypoint "\ certbot certonly **--dry-run** --webroot -w /var/www/certbot \ $staging_arg \ $email_arg \ $domain_args \ --rsa-key-size $rsa_key_size \ --agree-tos \ --force-renewal" certbot echo #### docker-compose中的特殊字符 如有特殊字符,用""将包含特殊字符的字符串包裹起来。如果有$,哪怕在引号内,也需要输入两个$$以作转义。 例如: db: image: "mysql:5.7.27" restart: always environment: - MYSQL_ROOT_PASSWORD="mima$$woshimima" 不过,上面的又有引号又有$的设置是否正确并不确定,因为初次这么设置发现无法登录(通过docker exec -it 进入执行mysql -uroot -p)。 #### docker-compose中mysql的密码设置 第一次运行后,只要/var/lib/mysql中的数据没有改变(这通常是因为已经mount到主机的特定目录),那么后续的密码更改是无效的,哪怕把container删了再重建也一样。所以这个时候,要不然用原来密码登录,要不然就是清空data目录。(data目录需要有,不然docker-compose up会失败)