听说这个docker技术很火,工作也正需要,所以整理一下最近两天学的有关docker的知识。
英文学习地址:http://docs.docker.com/linux/started/
中文学习地址:http://dockerpool.com/static/books/docker_practice/index.html 中文的详细些
一:安装:
root身份操作:执行:wget -qO- https://get.docker.com/gpg | sudo apt-key add -
自己安装的时候还出现了问题,应该是用了虚拟机,问题如下:
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)
INFO[0000] [graphdriver] using prior storage driver "aufs"
INFO[0000] Option DefaultDriver: bridge
INFO[0000] Option DefaultNetwork: bridge
WARN[0000] Running modprobe bridge nf_nat br_netfilter failed with message: modprobe: WARNING: Module br_netfilter not found. , error: exit status 1
INFO[0000] Firewalld running: false
WARN[0000] Your kernel does not support cgroup memory limit: mountpoint for memory not found
WARN[0000] mountpoint for cpu not found
FATA[0000] Error starting daemon: Devices cgroup isn't mounted
解决方法:
Set the GRUB_CMDLINE_LINUX value as follows:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Save and close the file.
Update GRUB.
$ sudo update-grub
Reboot your system.
二:简单命令
docker images --列出本地镜像
docker ps --列出正在运行的容器
docker ps -a --列出所有容器信息
docker build -t imageName . --创建一个镜像
docker run containName --从一个镜像中创建一个容器
docker run -d ubuntu name
docker exec -it name bash --启动了ubuntu容器, 用bash shell操作
docker stop $(docker ps -a -q) --停止所有容器
docker stop $(docker ps) --停止正在运行的容器
docker rm $(docker ps -a -q) --删除
docker -i -t tomcat7 /bin/bash --用Dockerfile创建一个容器tomcat7无法按照预想的工作,用bash进去看看哪里出了问题
docker run -d -p 8090:8080 zingdocker/jdk-tomcat --创建容器是做端口映射
三:Dockerfile
Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取Dockerfile,根据指令生成定制的image。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是怎么产生的。有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。
ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行。
我们常常会基于某个image来启动一个container,在这个container中我们可能会执行某些操作,比如创建一个文件,但是当这个container退出以后,如果我们以同一个的image启动了另一个container,在这个container中是看不到之前那个container创建的文件的,如果想让后面的container看到之前那个container创建的文件,就要把之前那个container保存成一个镜像,然后基于这个镜像来启动后面的那个container,举个简单的例子:(假设我们都是以root权限操作)
四:ubuntu+java+tomcat的镜像
# Pull base image
FROM ubuntu:13.10
MAINTAINER qinzhaokun "[email protected]"
# update source
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list
RUN apt-get update
# Install curl
RUN apt-get -y install curl
# Install JDK 7
RUN cd /tmp && curl -L 'http://download.oracle.com/otn-pub/java/jdk/7u65-b17/jdk-7u65-linux-x64.tar.gz' -H 'Cookie: oraclelicense=accept-securebackup-cookie; gpw_e24=Dockerfile' | tar -xz
RUN mkdir -p /usr/lib/jvm
RUN mv /tmp/jdk1.7.0_65/ /usr/lib/jvm/java-7-oracle/
# Set Oracle JDK 7 as default Java
RUN update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-7-oracle/bin/java 300
RUN update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-7-oracle/bin/javac 300
ENV JAVA_HOME /usr/lib/jvm/java-7-oracle/
# Install tomcat7
RUN cd /tmp && curl -L 'http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.tar.gz' | tar -xz
RUN mv /tmp/apache-tomcat-7.0.8/ /opt/tomcat7/
ENV CATALINA_HOME /opt/tomcat7
ENV PATH $PATH:$CATALINA_HOME/bin
ADD tomcat7.sh /etc/init.d/tomcat7
RUN chmod 755 /etc/init.d/tomcat7
# Expose ports.
EXPOSE 8080
# Define default command.
ENTRYPOINT service tomcat7 start && tail -f /opt/tomcat7/logs/catalina.out
export JAVA_HOME=/usr/lib/jvm/java-7-oracle/
export TOMCAT_HOME=/opt/tomcat7
case $1 in
start)
sh $TOMCAT_HOME/bin/startup.sh
;;
stop)
sh $TOMCAT_HOME/bin/shutdown.sh
;;
restart)
sh $TOMCAT_HOME/bin/shutdown.sh
sh $TOMCAT_HOME/bin/startup.sh
;;
esac
exit
创建镜像和容器
docker build -t docker/tomcat .
docker run -d -p 8090:8080 docker/tomcat