apt-get install docker.io
yum install docker
dnf install docker # Fedora 25+
zypper install docker
二、Docker容器
# 启动Docker
systemctl start docker
# 设置开机自启动,可选
systemctl enable docker
docker run "hello-world"
- 在启动容器时,如果使用的镜像在本地不存在,会尝试从网络上获取。
- 在一般情况下,启动Web服务的容器,使用以下命令:
# -d:daemon,使容器在后台运行
# -p:port,指定容器的端口,这里是将容器的80端口映射到主机的8001端口
docker run -d -p 8001:80 "image_name"
# -p参数可以多次使用,也可以指定一个端口范围
docker run -d -p 8080-8083:8080-8083 -p 80:80 -p 443:443 "image_name"
docker ps
# 也查看已经停止的容器
docker ps -a
- Docker会为容器分配一个Container ID和一个Container Name,Name可以在运行时通过
-name
自行指定,这两个可以用来标识容器。
- 需要停止容器时,使用以下命令:
docker stop "container_name"
# 或使用ID查找,仅输入ID的前几位即可
docker stop "container_id"
docker rm "container_name"
docker rm "container_id"
# 删除所有容器
# docker rm $(docker ps -a)
- 在容器运行的时候,可以用
exec
命令进入容器的Shell中进行一些操作
docker exec -it "container_id" /bin/bash
三、Docker镜像
- Docker容器是运行的Docker镜像实例,一般情况下,我们需要制作自己的Docker镜像。
- Docker镜像的制作依赖于Dockerfile,我们稍后在讨论Dockerfile的编写,这里假定我们有一个编写好的Dockerfile。
- 下面的命令将在当前路径查找Dockerfile并构建一个名为“image_name”的镜像。
docker build -t "image_name" .
- 在构建过程中需要在网络上下载来源镜像,可能需要一段时间。
- 如果Dockerfile中的命令都正确结束(Exit code 0),那么Docker镜像的构建也将顺利完成,我们可以通过下面的命令查看我们的所有镜像:
docker images
- 在镜像构建过程中会生成一些中间镜像,可使用
-a
参数查看
docker images -a
docker rmi "image_id"
- 我们还可以导出我们制作好的Docker镜像,下面的命令将image_name镜像导出为image_name.tar
docker save "image_name" > image_name.tar
- 在另一台机器上,我们不需要网络就可以导入并使用该镜像,当然两台机器必须是相同的体系结构(同为x86或ARM):
docker load < image_name.tar
四、Dockerfile
- Dockerfile本质上是一组命令集合,用于自动化构建镜像
- 来源镜像,一般可以使用标准的系统或者带有各种环境的系统
FROM ubuntu:latest
MAINTAINER wrlu
ENV REFRESHED_AT 2019-06-05
ENV LANG C.UTF-8
- 对于Debian的镜像可以设置禁止交互,这样制作镜像的时候就不会卡住
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y install php7.2 libapache2-mod-php7.2
RUN apt-get -y install php7.2-mysql php7.2-curl php7.2-gd php7.2-intl php7.2-imagick php7.2-imap php7.2-memcache php7.2-ps php7.2-pspell php7.2-recode php7.2-snmp php7.2-tidy php7.2-xmlrpc php7.2-xsl
- 一般情况下,为了使某些服务以低权限运行,可以创建新的用户
RUN useradd test
RUN mkdir /home/test/
RUN chown -R test:test /var/www/html/example
RUN apt-get -y install openjdk-11-jre
COPY tomcat/apache-tomcat-9.0.20.tar.gz /home/test/
RUN tar -xzf /home/test/apache-tomcat-9.0.20.tar.gz -C /home/test/
RUN mv /home/test/apache-tomcat-9.0.20/ /home/test/tomcat/
RUN rm /home/test/apache-tomcat-9.0.20.tar.gz
RUN rm -rf /home/test/tomcat/webapps/*
COPY source/SecIoT.war /home/test/tomcat/webapps/
COPY startup.sh /root/startup.sh
ENTRYPOINT bash /root/startup.sh
EXPOSE 80,443
EXPOSE 8080-8083
EXPOSE 9000-9999
- 启动脚本,完成Apache,MySQL,Tomcat等启动
#!/bin/bash
sleep 1
/etc/init.d/apache2 start
service mysql start
# 阻塞命令,用于阻止容器退出
tail -f /var/log/apache2/error.log
bash /home/test/tomcat/bin/startup.sh
sleep 10
tail -f /home/test/tomcat/logs/catalina.out
- MySQL配置,新版本不能再使用
mysqladmin
配置口令了,需要借助sql文件进行
RUN apt-get -y install mysql-server
COPY test.sql /root/test.sql
COPY change_password.sql /root/change_password.sql
#!/bin/bash
service mysql start
mysql -uroot < /root/wp.sql
rm /root/wp.sql
mysql -uroot < /root/change_password.sql
rm /root/change_password.sql
use mysql;
update user set authentication_string=PASSWORD("YOUR_MYSQL_PASSWORD") where User='root';
update user set plugin="mysql_native_password";
flush privileges;
export PATH=$PATH:/home/test/apps/jadx/bin/