Docker 实战

[从源码学设计]蚂蚁金服SOFARegistry 之 ChangeNotifier

Docker入门

概述

  Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

  Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

注意事项

  • Linux内核版本必须大于:3.8.+
  • 查看内核版本:uname -r

Docker下载及安装

1、关闭防火墙
systemctl stop firewalld.service


2、修改为SELINUX=disabled
vim /etc/selinux/config
SELINUX=disabled


3、安装wget
 yum -y install wget



4、查看docker版本
yum list|grep docker

5、安装docker
yum install -y docker.x86_64


6、安装docker ce社区版
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


7、下载社区版本
yum -y install docker-ce-cli.x86_64

8、设置开机启动
systemctl enable docker

9、更新xfsprogs
yum update xfsprogs

10、启动docker服务
systemctl start docker

11、查看docker版本
docker version

12、查看docker详细信息
docker info

 

 

Docker镜像的搜索及查看删除

查看本地镜像

docker images

搜索镜像

docker search centos

docker search 名字

搜索镜像并过滤是官方的

docker search --filter "is-official=true" centos

搜索镜像并过滤大于多少颗星星的

docker search --filter stars=10 centos

下载Centos7镜像

docker pull centos:7

docker pull 项目:版本号

修改本地镜像名字(小写)

docker tag centos:7 mycentos:1

本地镜像的删除

方式一
docker rmi centos:7


方式二
docker rmi IMAGE ID

配置阿里云镜像加速

Docker基本操作

构建容器

  • -i:表示以交互模式运行容器(让容器的标准输入保持打开)
  • -d:表示后台运行容器,并返回容器id
  • -t:为容器重新分配一个伪输入终端
  • --name:为容器指定名称

docker run -itd --name=mycontos centos:7

查看本地所有的容器

docker ps -a

查看本地正在运行的容器

docker ps

停止容器

方式一
docker stop NAMES

方式二
docker stop CONTAINER ID

一次性停止所有容器

docker stop $(docker ps -a -q)

一次性全部启动

docker ps -a -q
docker start $(docker ps -a -q)

启动容器

docker start CONTAINER_ID / CONTAINER_NAME

重启容器

docker restart CONTAINER_ID / CONTAINER_NAME

删除容器

docker rm CONTAINER_ID / CONTAINER_NAME

必须先停止,才能删除

强制删除镜像

docker rm -f CONTAINER_ID / CONTAINER_NAME

查看容器详细信息

docker inspect CONTAINER_ID / CONTAINER_NAME

进入容器

docker exec -it 0ad5d7b2c3a4 /bin/bash

退出容器

exit

容器的文件复制于挂载

从宿主机复制到容器

docker cp 宿主机本地路径 容器名称:容器路径

从容器复制到宿主机

docker cp 容器名称:容器路径 宿主机本地路径

  这个就不演示了,操作跟上面那个相反。

ASP.NET Core 上传文件到共享文件夹

宿主机文件挂载到容器里(重要)

docker run -itd -v --name=mycentos77 /root/cyb/:/home centos:7

  可以将mysql存储文件路径,挂载到容器里

Docker自定义镜像

制作镜像方式

  • 基于Docker Commit制作镜像
  • 基于dockerfile制作镜像,Dockerfile方式为主流的制作镜像方式

Commit构建自定义镜像

方式一
docker commit 9bdb420d8ea0  mycentos:v1

语法:docker commit CONTAINER ID PEPOSITORY:TAG


方式二
docker commit -a "chenyanbin" -m "mkdir /home/chenyanbin" 9bdb420d8ea0  mycentos:v2

    -a:标注作者
    -m:说明解释

查看详细信息
docker inspect CONTAINER ID

查看本地镜像
docker images

 

dockerfile构建自定义镜像 

vi dockerfile


FROM centos:7 
MAINTAINER ybchen 543210188@qq.com 
RUN echo "正在构建镜像!!!" 
WORKDIR /home/chenyanbin 
COPY 123.txt /home/chenyanbin 
RUN yum install -y net-tools


构建:docker build -t mycentos:v1 .

查看:docker images

启动:docker run -itd mycentos:v1

进入镜像:docker exec -it mycentos:v1 /bin/bash

FROM

  基于那个镜像

MAINTAINER

  注明作者

COPY

  复制文件进行镜像(只能用作相对路径,不能用绝对路径)

ADD

  复制文件进入镜像(如果是.tar.gz文件会解压)

WORKDIR

  指定工作目录,假如路径不存在会创建路径

ENV

  设置环境变量

EXPOSE

  暴露容器端口

RUN

  在构件镜像的时候执行,作用于镜像层面

ENTRYPOINT

  在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条

CMD

  在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条

  容器启动后执行默认的命令或参数,允许被修改

命令格式

  sheel命令格式:RUN yum install -y net-tools

  exec命令格式:RUN ["yum","install","-y","net-tools"]

Dockerfile实战

构建jdk8

在宿主机中执行如下命令

1、解压
tar -xf jdk-8u261-linux-x64.tar.gz

2、移动
mv jdk1.8.0_261 /usr/local/jdk

3、打开:/etc/profile
vi /etc/profile

4、在最下面追加如下命令
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

5、让配置文件生效
source /etc/profile

编辑dockerfile

1、jdk包必须放到/root的文件夹下

2、编辑dockerfile
vi dockerfile

FROM centos:7
ADD jdk-8u261-linux-x64.tar.gz /usr/local
RUN mv /usr/local/jdk1.8.0_261 /usr/local/jdk
ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

3、构建dockerfile
docker build -t mycentos:jdk .

4、启动
docker run -itd mycentos:jdk

5、进入容器
docker exec -it xxx /bin/bash

FROM centos:7
ADD jdk-8u211-linux-x64.tar.gz /usr/local
RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk 
ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
ADD apache-tomcat-8.5.35.tar.gz /usr/local
RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]

启动容器
docker run -itd -p 80:8080 -v /root/test/ROOT:/usr/local/tomcat/webapps/ROOT mycentos:jdk /bin/bash
View Code

构建nginx

1、dockerfile
FROM centos:7
ADD nginx-1.18.0.tar.gz /usr/local
COPY nginx_install.sh /usr/local
RUN sh /usr/local/nginx_install.sh
EXPOSE 80


2、sheel脚本,vi nginx_install.sh
#!/bin/bash 
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel 
cd /usr/local/nginx-1.18.0 
./configure --prefix=/usr/local/nginx && make && make install

3、构建dockerfile
docker build -t mycentos:nginx .

4、启动,-p 宿主port:容器port
# -p 映射端口
docker run -itd -p 80:80 mycentos:nginx /usr/local/nginx/sbin/nginx -g "daemon off;"


5、进入容器
docker exec -it xxx /bin/bash

6、查看防火墙
firewall-cmd --state

7、停止防火墙
systemctl stop firewalld.service

8、禁止防火墙开机启动
systemctl disable firewalld.service 

9、开启防火墙
systemctl start firewalld.service

注:如果访问不到,查看防火墙是否开启

构建Redis

1、编辑:vi redis_install.sh
#!/bin/bash
yum install -y gcc gcc-c++ make openssl openssl-devel
cd /home/redis-4.0.11
make && make PREFIX=/usr/local/redis install
mkdir -p /usr/local/redis/conf/
cp /home/redis-4.0.11/redis.conf /usr/local/redis/conf/
sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/conf/redis.conf
sed -i '88s/protected-mode yes/protected-mode no/' /usr/local/redis/conf/redis.conf



2、编写dockerfile
FROM centos:7
ADD redis-4.0.11.tar.gz /home
COPY redis_install.sh /home
RUN sh /home/redis_install.sh
ENTRYPOINT /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

3、构建容器:
docker build -t mycentos:redis .

4、启动容器: #6380是宿主机端口,6379是容器的端口
docker run -itd -p 6380:6379 mycentos:redis

5、进入容器
docker exec -it xxx /bin/bash


6、测试redis
/usr/local/redis/bin/redis-cli

构建Mysql

方式一

1、docker 拉取mysql5.7
docker pull mysql:5.7

2、官网地址
https://hub.docker.com/

3、启动mysql
docker run --name some-mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

4、进入容器
docker exec -it some-mysql env LANG=C.UTF-8 /bin/bash

5、进入mysql
mysql -uroot -proot

6、创库
create database `db_student`;

7、进入库
use db_student;

8、建表
drop table if exists `user`;
CREATE TABLE user (
id tinyint(5) zerofill auto_increment not null comment '学生学号',
name varchar(20) default null comment '学生姓名',
age tinyint default null comment '学生年龄',
class varchar(20) default null comment '学生班级',
sex char(5) not null comment '学生性别',
unique key (id) ) engine=innodb charset=utf8;

9、插入几条记录
insert into user values('1','小明','15','初三','男');
insert into user values('2','小红','13','初二','女');

方式二

1、编辑:init.sql
vi init.sql

create database `db_student`;
use db_student;
drop table if exists `user`;
CREATE TABLE user (
id tinyint(5) zerofill auto_increment not null comment '学生学号',
name varchar(20) default null comment '学生姓名',
age tinyint default null comment '学生年龄',
class varchar(20) default null comment '学生班级',
sex char(5) not null comment '学生性别',
unique key (id) ) engine=innodb charset=utf8;
insert into user values('1','小明','15','初三','男');


2、编写dockerfile
vi dockerfile

FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ENV LANG=C.UTF-8
ADD init.sql .

3、构建镜像
docker build -t my-mysql:5.7 .

3、启动mysql
docker run --name some-mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d my-mysql:5.7

4、进入容器
docker exec -it some-mysql env LANG=C.UTF-8 /bin/bash

5、进入mysql
mysql -uroot -proot

6、切换库
use db_student;

7、查看
select * from user;

人生苦短我用Python,本文助你快速入门

相关推荐

发表评论

路人甲

网友评论(0)