pd: original+123&.
进到nginx容器的shell里面
sudo docker exec -it xxx bash
nginx -v 1.14.0
docker里面安装vim, 需要:
1. apt-get update
2. apt-get install vim
从当前的container创建一个image
docker commit container_name
参看:
https://www.scalyr.com/blog/create-docker-image/
runc是Docker自己开发的容器runtime,docker engine是runc的管理工具。
dockerfile是包含若干命令的,通过这些命令创建docker image,runtime根据docker image创建容器
容器通过image创建,需要仓库存放image,这个仓库就是Registry。
企业可以用Docker Registry构建私有的Registry。Docker Hub是公共的托管Registry。
容器编排(orchestration)引擎会动态地创建、迁移和销毁集群中的业务。
kubernetes就是Google开发的开源编排引擎。
容器管理平台是架构在编排引擎之上的一个更为通用的平台。提供更加方便的功能,比如一键应用部署等。管理平台有:
Rancher和ContainerShip。
基于容器的PaaS,为微服务应用开发人员和公司提供了开发、部署和管理应用的平台。
Centos 7上面安装docker:
1. 从官方Docker仓库安装,首先更新包数据库
yum check-update
2. 添加官方Docker仓库,下载并安装Docker
curl -fsSL https://get.docker.com/ | sh
3. 启动Docker deamon守护进程
sudo systemctl start docker
4. 验证一下
sudo systemctl status docker
5. 查看系统有哪些images:docker images
6. 查看哪些container在运行: docker ps -a
7. 删除container: docker rm <CONTAINER ID>
8. 删除image: docker rmi <IMAGE ID>
9. pull特定的tag: docker pull name:tag
e.g. docker pull ubuntu:14.04
10. 运行mysql docker container
docker run --name mysql -e MYSQL_ROOT_PASSWORD=Shuxxxx -e MYSQL_DATABASE=hudong -e MYSQL_USER=james -e MYSQL_PASSWORD=Hxxxxx -p 3306:3306 -d mysql:5.7.21
11. 安装docker-machine
$ base=https://github.com/docker/machine/releases/download/v0.14.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo install /tmp/docker-machine /usr/local/bin/docker-machine
12. 在centos上访问docker里面的mysql:
sudo docker exec -it mysql mysql -uroot -p
// docker exec -it xxxx /bin/bash
use hudong
show tables;
13. 在centos上安装phpmyadmin
sudo docker pull phpmyadmin/phpmyadmin
并且运行:
sudo docker run --name myadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin
其中:db前面的mysql是指container进程的NAMES(可以通过docker ps查看),前面的myadmin是给即将要启动的
phpmyadmin这个container取的名字
然后在Win10开一个浏览器,键入47.94.xx.xxx:8080, user/passwd: root/Shuxxxxx
终于能访问了,参考https://medium.com/coderscorner/connecting-to-mysql-through-docker-997aa2c090cc
删除掉所有的container,然后调用docker-compose安装了项目的continer之后,想单独装一个phpmyadmin
输入命令之后,出现错误:docker:
Error response from daemon: Cannot link to /docker_hdback-mysql_1, as it does not belong to the default network.
这是因为mysql是用docker-compse安装的,我现在想用docker命令行工具来操纵一个由docker-compose管理的container,这样会报错,即使我们用了link选项,解决办法很简单,因为docker支持多个网络,为了安全原因,docker-compose使用的是自己的网络而不是docker的默认网络,我们需要做的就是告诉docker我们要使用docker-compse的网络。
首先查看一下docker都有哪些网络:
docker network ls
猜想用的网络是docker_default,加上-net标志运行docker run即可:
sudo docker run --name myadmin --net docker_default -d --link docker_hdback-mysql_1 -p 8080:80 phpmyadmin/phpmyadmin
14. 临时disable selinux:sudo setenforce 0
15. 安装docker compose:
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
16. 修改执行权限:
sudo chmod +x /usr/local/bin/docker-compose
17. 检查安装是否成功: docker-compose --version
然后在Windows机器上用./mvnw package -Pprod dockerfile:build -DskipTests
生成镜像。
18. docker-mysql的环境变量:
MYSQL_ROOT_PASSWORD
: The password for the root user. Defaults to a blank passwordMYSQL_DATABASE
: A database to automatically create. If not provided, does not create a database.MYSQL_USER
: A user to create that has access to the database specified byMYSQL_DATABASE
.MYSQL_PASSWORD
: The password forMYSQL_USER
. Defaults to a blank password.
19. 忽略mvn test的方法:
./mvnw package -Pprod dockerfile:build -D"maven.test.skip"=true
20. Docker文件中有多个CMD指令,只有最后一个CMD有效。而且如果docker run指定了其他命令,CMD指定的默认命令将被忽略。
21. CMD三种格式,一种是Exec格式,一种是为ENTRYPOINT提供额外的参数,此时ENTRYPOINT必须用Exec格式。一种是Shell格式。
22. ENTRYPOINT不会被忽略,一定会被执行,即便docker run指定了其他命令。
23. CMD和ENTRYPOINT推荐使用Exec格式,因为指令可读性更强,更容易理解。RUN两种格式都可以。
24. ENTRYPOINT的Shell格式会忽略任何CMD或docker run提供的参数。
25. 配置阿里云镜像加速器:阿里云产品控制台,容器镜像服务,下方有个“镜像加速器”链接:用了国内镜像之后,速度就飞起来了,哈哈。
26. 部署到云上,用docker-compose,结果出来class path resource[template.ban] cannot be resolved to absolute file path because it does not reside in the file system.
代码出了问题,在jar或者war里面加载文件,代码里面不应该出现resource.getFile()应该改为resource.getInputStream()
27. docker-compose restart 重启所有停止的或者正在运行的服务
重启之后对compose.yml的修改不会生效
docker-compose up, builds, (re)creates, starts, and attaches to containers for a service
如果linked services没有运行,这个命令还会启动这些服务;如果已经在运行了,就不会启动
如果某个服务的containers存在,并且服务的配置或者image在container创建之后发生了改变,docker-compose up会应用
这些修改,怎么做呢?就是先停止container,然后重新创建container(保留挂载的volumes)。如果不想应用这些修改,
用--no-recreate
docker-compose stop, 停止服务,但是不会删除containers,停止之后的container可以用start来启动。
docker-compose down, 停止并且删除containers, networks, images和volumes
down的选项:
--rmi
-v, --volumes
--remove-orphans
-t, --timeout TIMEOUT
=====================================================
支持多个ssh key账号:
ssh-keygen提示保存的时候指定一个不一样的文件名称,如:id_rsa_ev
把生成的公钥添加到code.xxx.com
创建一个~/.ssh/config文件
编辑:
#Default Code.aliyun.com
Host xinda
HostName code.aliyun.com
User git
IdentityFile ~/.ssh/id_rsa
Host evc
HostName code.aliyun.com
User git
IdentityFile ~/.ssh/id_ras_ev
再提交第二个账号的代码时,使用:
git remote add origin git@evc:xxxx/testing.git
用ossutil64工具批量下载文件的过程:
下载安装ossutil64.exe,先配置:
ossutil64 config -L ch
输入语言,endpoint,accessKeyID, accessKeySecret, stsToken留空
然后ossutil64 cp oss://bucket-name/parts/ parts --recursive
下载整个目录
有时在不同公司的docker镜像之间切换时,在Windows 10上build image时,会经常发生如下把人逼疯的错误:
get https://registry-1.docker.io/v2/: net/http timeout
解决方案就是把正确的镜像加速器地址应用到windows docker中,再重启docker就行了。我草。
用如下命令在windows上build docker image:
./mvnw package -Pprod dockerfile:build -DskipTests
然后在Centos上启动程序:
docker-compose -f app.yml up
停止docker
sudo docker-compose -f app.yml down
就可以了。
如果个人没有阿里云,也就没有现成的镜像加速器,可以采用在Docker的Daemon选项,右侧的Insecure registries:
填上registry.mirrors.aliyuncs.com
可以试试,
单独给前端打包:参照package.json文件里面的scripts部分,参看webpack:prod,那么打成产品级别的包命令为:
yarn webpack:prod
用./mvnw package xxx打完包之后,在powershell里面docker images显示每个image的信息
比如tag, image id等等。
往阿里云上push docker image:
安装docker-compose:
yum install epel-release
yum install -y python-pip
pip install docker-compose
yum upgrade python*
docker-compose -v
访问mysql:
看log:
docker logs docker_db_1
docker exec -it docker_db_1 mysql -uroot -p
用nmap扫描远程端口:
d:\Program Files (x86)\Nmap>nmap -A -T4 www.xxx.com -p 8081
碰到一个故障:
后台程序在
Web application fully configured
停住了,然后过了几分钟,自己退出了:
docker container exited with code 1
这种问题,首先要查看container的log,docker logs $container_id, 如果还不行,要用
https://stackoverflow.com/questions/38112968/how-to-know-the-reason-why-a-docker-container-exits
docker inspect $container_id
找出了一个原因,liquibase lock了,然后找了个帖子,一个方法:
UPDATE DATABASECHANGELOGLOCK SET LOCKED=FALSE, LOCKGRANTED=null, LOCKEDBY=null where ID=1;
运行之后,再跑,这时候还是有问题,但是能打出异常信息了。中间还碰到elasticsearch不行,后来重启了服务器,才好的,
这个以后还是要研究研究。
删除某个image
sudo docker rmi $container_id
docker run -d -p 80:80 httpd运行第一个容器
移除data volume,用一下命令:
docker-compose down --volumes
2019年一月时候尝试用之前的命令./mvnw package -Pprod ...来生产docker的image,但是总是失败,加-X查看详细信息,提示GOOGLE_APPLICATION_CREDENTIALS环境变量没有设置,找不到service account file, 这个是和com.spotify:maven_plugin相关的,最后按照网址https://cloud.google.com/docs/authentication/production#auth-cloud-implicit-java推荐的办法,进入https://cloud.google.com/docs/authentication/production#auth-cloud-implicit-java(通过vpn)创建了一个服务账户,生成一个json文件,然后新建了一个环境变量,指向D:\EnterWork\HuDong\HDBack-6b93812e78fa.json,才ok。
============================================================
从oss批量下载:
ossutil cp oss://your_bucket your_dir -r -f -u