码迷,mamicode.com
首页 > 其他好文 > 详细

Docker-安装及简单使用

时间:2018-12-14 14:01:19      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:mes   指定   ssl   nginx模块   bash   hang   shel   ntp   null   

安装docker

yum remove docker*
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
systemctl start docker
systemctl enable docker

配置docker下载国内镜像

echo ‘{
"registry-mirrors": ["https://registry.docker-cn.com"]
}‘ >> /etc/docker/daemon.json

Dockerfile

#编写Dockerfile,Dockerfile参数请查看其它文档
# 如果你需要把项目文件放到对应的tomcat webapp或者nginx下可以使用COPY复制到相关目录,nginx的编译请根据自己的需求,尽量减少对应的Dockerfile指令(层数)
#这个Dockerfile仅适合练手,如果生产环境基础镜像建议选择alpine 或者 alpha,生产环境应该控制镜像的大小最好在几百兆,不要太大
#由于这个Dockerfile有大量的yum安装,甚至还有编译安装,发布速度比较慢;可以考虑作为基础镜像,里面的nginx、JDK、tomcat、yum.conf可以自己去下载适合自己的版本和DOckerfile放在同一目录
#如果你是真需要nginx + tomcat + mysql的环境,建议把指定版本的nginx模块编译好后做一个nginx的基础镜像、tomcat+jdk的和mysql也一样做一个基础镜像,然后Dockerfile只需要把项目文件放到webapps跟刷入sql语句到mysql即可

mkdir /root/centos && cd /root/centos

echo ‘FROM centos:7
MAINTAINER Austyn
LABEL purpose="nginx+tomcat" series="0001"
ADD nginx-1.15.6.tar.gz /tmp/
ADD apache-tomcat-8.5.29.tar.gz /tmp
ADD jdk-8u172-ea-bin-b03-linux-x64-18_jan_2018.tar.gz /tmp
COPY yum.conf /tmp/
RUN mkdir /tmp/yumbak && mv /etc/yum.conf /tmp/yumbak/ && mv /tmp/yum.conf /etc/yum.conf && rm -rf /etc/yum.repos.d/* && yum makecache \
&& yum update && yum install vim net-tools -y \
&& yum install ntpdate telnet passwd openssl openssh-server openssh-clients make gcc gcc-c++ zlib-devel gd -y \
&& echo "root:123456" | chpasswd \
&& mkdir /var/run/sshd \
&& ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ‘‘ \
&& ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ‘‘ \
&& ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ‘‘\
&& ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ‘‘ \
&& echo "RSAAuthentication yes" >> /etc/ssh/sshd_config \
&& echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config \
&& rpm --rebuilddb && yum -y install kde-l10n-Chinese reinstall glibc-common && localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \
&& echo "localedef -v -c -i en_US -f UTF-8 en_US.UTF-8" > /root/init.sh && chmod +x /root/init.sh \
&& echo "/usr/sbin/sshd" >> /root/init.sh \
&& echo "ntpdate time.windows.com" >> /root/init.sh \
&& mv /etc/localtime /etc/localtime.bak \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& groupadd www \
&& useradd -s /sbin/nologin -g www www \
&& mkdir -pv /data/html \
&& chown -R www:www /data/html \
&& yum install -y pcre-devel \
&& mv /tmp/jdk1.8.0_172 /usr/lib/jvm \
&& echo ‘export JAVA_HOME=/usr/lib/jvm/‘ >> /etc/profile \
&& echo ‘export JRE_HOME=${JAVA_HOME}/jre‘ >> /etc/profile \
&& echo ‘export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib‘ >> /etc/profile \
&& echo ‘export PATH=${JAVA_HOME}/bin:$PATH‘ >> /etc/profile \
&& source /etc/profile \
&& cd /tmp/nginx-1.15.6 && ./configure --user=www --group=www --prefix=/usr/local/nginx && make && make install \
&& mv /tmp/apache-tomcat-8.5.29 /usr/local/tomcat \
&& echo "LANG=zh_CN.UTF-8" > /etc/locale.conf \
&& echo "/usr/sbin/sshd -D" >> /root/init.sh \
&& echo "source /etc/profile" >> /root/init.sh \
&& echo "/usr/local/tomcat/bin/startup.sh" >> /root/init.sh \
&& echo "/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf" >> /root/init.sh \
&& echo "tail -f /dev/null" >> /root/init.sh

EXPOSE 80
EXPOSE 8080
EXPOSE 22
CMD [ "sh","/root/init.sh" ]‘ > Dockerfile

构建镜像

docker build -t platform:v1 . #创建platform:v1 镜像

使用镜像启动容器(镜像实例)

docker run -i -t -d --name="test" --privileged -p 50080:80 -p 58080:8080 -p 50022:22 platform:v1 #-i和-t 一个是打开标准输入一个是代表分配伪终端,基本上是肯定要加的,否则容器自动退出,代表-d 表示后台运行,--privileged代表容器里的root真正具有root权限,-p指定端口映射

连接容器

# exec连接
# docker exec -it test /bin/bash
# ssh连接
# ssh 172.17.0.2 用户root 密码123456

测试是应用部署情况

#curl $宿主机ip:58080
#curl $宿主机ip:50080

一些基本docker命令

docker stop $container_name/$id #停止一个正在运行的容器
docker start $container_name/$id #启动一个停止的容器
docker ps -a #查看所有容器
docker images #查看所有镜像
docker rmi $image_id #删除镜像

Docker镜像迁移

#导出/导入镜像,推荐使用save,他会记录整个镜像的每一次提交
#----------save-----------
docker save centos > centos.tar #docker save $ID/$NAME,导出
docker load < centos.tar #导入
#-----------export----------
docker export $ID/$Name > export.tar #导出
docker import export.tar centos:7 #导入

Docker将容器制作成镜像

docker commit -m "$messages_info" -a "$author_name" $container_id $images_name
docker commit -m "test" -a "austyn" b5969f55420e testimages:v1.0

Docker容器迁移

#将容器制作成镜像后进行迁移

Dockerfile特殊参数

#比较重要的几个Dockerfile参数,COPY http://www.cnblogs.com/dazhoushuoceshi/p/7066041.html,除了有错别字以外,基本上都很详细有他自己的见解
#-----------------------------------------------
#1、WORKDIR
#WORKDIR /path/to/workdir
#设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次。
#例:
#WORKDIR /a
#WORKDIR b
#WORKDIR c
#RUN pwd
#pwd执行的结果是/a/b/c
#
#WORKDIR也可以解析环境变量
#例:
#ENV DIRPATH /path
#WORKDIR $DIRPATH/$DIRNAME
#RUN pwd
#pwd的执行结果是/path/$DIRNAME
#-----------------------------------------------
#2、VOLUME
#可实现挂载功能,可以将本地文件夹或者其他容器中的文件夹挂载到这个容器中
#语法为:
#VOLUME ["/data"]
#说明:
#["/data"]可以是一个JsonArray ,也可以是多个值。所以如下几种写法都是正确的
#VOLUME ["/var/log/"]
#VOLUME /var/log
#VOLUME /var/log /var/db
#一般的使用场景为需要持久化存储数据时
#容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。
#所以当数据需要持久化时用这个命令。
#-----------------------------------------------
#3、ENTRYPOINT
#功能是启动时的默认命令
#语法如下:
#1. ENTRYPOINT ["executable", "param1", "param2"]
#2. ENTRYPOINT command param1 param2
#第二种就是写shell
#第一种就是可执行文件加参数
#
#与CMD比较说明(这俩命令太像了,而且还可以配合使用):
#
#1. 相同点:
#
# 只能写一条,如果写了多条,那么只有最后一条生效
#
# 容器启动时才运行,运行时机相同
#
#
#
#2. 不同点:
#
# ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖
#
# 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数
#
#如下:
#
#FROM ubuntu
#ENTRYPOINT ["top", "-b"]
#CMD ["-c"]
#
# 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD是一个完整的指令,那么它们两个会互相覆盖,谁在最后谁生效
#
#如下:
#
#FROM ubuntu
#ENTRYPOINT ["top", "-b"]
#CMD ls -al
#
#那么将执行ls -al ,top -b不会执行。

Docker-安装及简单使用

标签:mes   指定   ssl   nginx模块   bash   hang   shel   ntp   null   

原文地址:http://blog.51cto.com/7625939/2330307

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!