Dockerfile构建随记

  • java环境变量配置
export JAVA_HOME=/usr/local/jdk1.8.0_221
export PATH=${PATH}:${JAVA_HOME}/bin:
  • 构建过程中,复制文件使用copy not add ,构建过程中存在一次异常,使用add 添加jdk的tar包,后执行tar -xvf 脚本,提示tar包成了文件夹,进入构建失败的image,发现源码tar包的被add复制成了文件夹,后使用copy正常执行构建脚本

  • 环境变量定义问题 在dockerfile中操作/etc/profile文件,然后再执行source /etc/profile ,等镜像构建完成后,开启一个容器,会发现配置的环境变量是无效的。 解决方法,a、使用env 在dockerfil中直接定义环境变量 b、在家目录下的 .bashrc 中添加 source /etc/profile 一行 。

  • tar下载源,以前放在腾讯云的代码仓库上,现在无法访问了,还好阿里的coding还可以使用,使用wget直接下载上传的源码包,赞阿里一个,让我白嫖一次

  • docker-compose 配置 docker -e 参数 使用 environment

  • centos8换yum源出现问题,记得下载8版本的源 不要下载错了

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
5.清除文件并重建元数据缓存
yum clean all
yum makecache
6.最后更新软件包,这一步要下载安扎ung或升级一百多个软件包,比较费时间,大概三五分钟吧!
yum update -y
  • 设置镜像为东八区时间
cp  /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
  • centos镜像里面没有sshd和ssh命令

for ssh

yum安装ssh客户端

 yum -y install openssh-clients

ssh [email protected]

[email protected]'s password: 

for sshd


 yum install -y passwd openssl openssh-server
 
/usr/sbin/sshd

启动sshd
    /usr/sbin/sshd
    这一步,若报错,如
        Could not load host key: /etc/ssh/ssh_host_rsa_key
    则使用如下名令
        ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key 
        ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
        ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
    再次执行,便是启动了

ssh 无密码登录


 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
 chmod 0600 ~/.ssh/authorized_keys
  • dockerfile 的cmd和enterpoint 一起使用,先执行enterpoint 再拼接cmd为参数
ENTRYPOINT ["sh", "/usr/local/bin/entrypoint.sh"]

CMD /root/startup.sh

entrypoint.sh 脚本末尾貌似必须是

exec $@
  • docker创建自定义网络,和运行容器时候指定ip和主机名
# 创建网络
docker network create --subnet=192.18.0.0/16 mynetwork
# 运行容器 设置主机名和ip
 docker run -it --rm -h master --net mynetwork --ip 199.18.0.2  042324fdbc6e /bin/bash
  • docker容器运行不退出的方法

问题描述
执行docker run image-id bash后,容器退出

解决方法
docker容器的主线程(dockfile中CMD执行的命令)结束,容器会退出

有以下几种解决方法

#使主进程无法结束
docker run -d centos /bin/bash -c "while true;do echo hello docker;sleep 1;done"

#使用交互式启动
docker run -i [CONTAINER_NAME or CONTAINER_ID]

#使用后台模式和tty选项
docker run -dit [CONTAINER_NAME or CONTAINER_ID]

构建dockefile代码仓库

你可能感兴趣的:(Dockerfile构建随记)