阿里云docker

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 password
  • MYSQL_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 by MYSQL_DATABASE.
  • MYSQL_PASSWORD: The password for MYSQL_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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

novodexx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值