Docker-安装及简单使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker-安装及简单使用相关的知识,希望对你有一定的参考价值。
安装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-安装及简单使用的主要内容,如果未能解决你的问题,请参考以下文章