Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
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 images
docker search centos
docker search 名字
docker search --filter "is-official=true" centos
docker search --filter stars=10 centos
docker pull centos:7
docker pull 项目:版本号
docker tag centos:7 mycentos:1
方式一
docker rmi centos:7
方式二
docker rmi IMAGE ID
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 容器名称:容器路径 宿主机本地路径
这个就不演示了,操作跟上面??那个相反。
docker run -itd -v --name=mycentos77 /root/cyb/:/home centos:7
可以将mysql存储文件路径,挂载到容器里
方式一
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
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
基于那个镜像
注明作者
复制文件进行镜像(只能用作相对路径,不能用绝对路径)
复制文件进入镜像(如果是.tar.gz文件会解压)
指定工作目录,假如路径不存在会创建路径
设置环境变量
暴露容器端口
在构件镜像的时候执行,作用于镜像层面
在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条
在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条
容器启动后执行默认的命令或参数,允许被修改
命令格式
sheel命令格式:RUN yum install -y net-tools
exec命令格式:RUN ["yum","install","-y","net-tools"]
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
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
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
注:如果访问不到,查看防火墙是否开启
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
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;