前言
刚刚接触docker的同学看到会很模糊都不知道docker是什么东西,有什么用,可以用来做什么那么接下来的文章就是告诉大家docker大致是什么用来做什么
Docker 是什么?
docker里面有俩家伙镜像
images
以及容器container
.类似一个大船上可以装很多个集装箱每个集装箱都是相互独立的。一个镜像可以用来生成一个或多个容器,每个容器与服务之间是一对一的存在,比如同时需要多个tomcat服务,我们可以去pull一个tomcat的镜像,然后运行成多个容器来运行,每个容器之间默认是独立的,如果需要交互我们需要给他们之间建立连接--link
(我有个redis容器有个java服务容器需要之间互相访问通讯就需要用到--link)。docker也方便移植,我们可以把我们自己的一套运行环境或者服务环境全部提交到自己的docker hub 到别的服务器我们可以直接pull下来使用。我们也可以使用docker来隔离应用,在一些特定的情况下我们需要把应用隔离,那么我们运行不同的容器来隔离不同的应用
Docker基本使用
- 镜像
他可以是任何服务以及任何开发过程中需要的环境(例:mysql reids tomcat 等服务)
,我们可以通过自己的方式来获取或者生成我们想要的镜像.例如我们可以从docker hub 仓库拉,或者自己build一个我们自己的镜像发到docker hub(ps:当然推到自己的账号下面,可以方便以后的环境移植等操作)
1.docker hub 拉取基本方法
docker pull mysql (拉取mysql 你也可以后面跟上相关的版本号 PS:mysql:5.6 ) docker images (查看当前镜像)
2.自己build镜像
首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mysql && useradd -r -g mysql mysql
# add gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true \
&& apt-get purge -y --auto-remove ca-certificates wget
RUN mkdir /docker-entrypoint-initdb.d
# FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:
# File::Basename
# File::Copy
# Sys::Hostname
# Data::Dumper
RUN apt-get update && apt-get install -y perl pwgen --no-install-recommends && rm -rf /var/lib/apt/lists/*
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
ENV MYSQL_MAJOR 5.6
ENV MYSQL_VERSION 5.6.31-1debian8
RUN echo "deb http://repo.mysql.com/apt/debian/ jessie mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list
# the "/var/lib/mysql" stuff here is because the mysql-server postinst doesn't have an explicit way to disable the mysql_install_db codepath besides having a database already "configured" (ie, stuff in /var/lib/mysql/mysql)
# also, we set debconf keys to make APT a little quieter
RUN { \
echo mysql-community-server mysql-community-server/data-dir select ''; \
echo mysql-community-server mysql-community-server/root-pass password ''; \
echo mysql-community-server mysql-community-server/re-root-pass password ''; \
echo mysql-community-server mysql-community-server/remove-test-db select false; \
} | debconf-set-selections \
&& apt-get update && apt-get install -y mysql-server="${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* \
&& rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \
&& chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \
# ensure that /var/run/mysqld (used for socket and lock files) is writable regardless of the UID our mysqld instance ends up having at runtime
&& chmod 777 /var/run/mysqld
# comment out a few problematic configuration values
# don't reverse lookup hostnames, they are usually another container
RUN sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my.cnf \
&& echo 'skip-host-cache\nskip-name-resolve' | awk '{ print } $1 == "[mysqld]" && c == 0 { c = 1; system("cat") }' /etc/mysql/my.cnf > /tmp/my.cnf \
&& mv /tmp/my.cnf /etc/mysql/my.cnf
VOLUME /var/lib/mysql
COPY docker-entrypoint.sh /usr/local/bin/
RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 3306
CMD ["mysqld"]
构建自己的镜像
docker build -t mysql_server .(build镜像)
docker images(查看镜像)
- 容器
容器的话就是把我们需要的服务通过镜像运行成我们想要的服务容器每一个容器针对一个服务器1.容器的基本使用
docker run --name mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql(运行) docker ps -a(查看容器的详情)
run 运行一个容器
--name 后面是这个镜像的名称
-p 3306:3306 表示在这个容器中使用3306端口(第二个)映射到本机的端口号也为3306(第一个)
-d 表示使用守护进程运行,即服务挂在后台
最后面 容器名称
总结
docker中的命令还是比较多的一些查询当前服务,进入服务,等一些基本的操作还需要我们去记牢。