Docker入门(基础)

帮助文档:

# 1、卸载旧的版本
yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine
	
# 2、需要的安装包
yum install -y yum-utils

# 3、设置镜像的仓库
yum-config-manager \
	--add-repo\
	https://download.docker.com/linux/centos/docker-ce.repo  # 默认是从国外的!
	
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云的,十分的快

# 更新yum软件包索引
yum makecache fast

# 4、安装dokcer相关的 docker-ce 社区 ee 企业
yum install docker-ce docker-ce-cli containerd.io

# 5、启动docker
systemctl start docker

# /var/lib/docker 		docker的默认工作路径

阿里云镜像加速

在这里插入图片描述

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://4he1cjup.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装tomcat

作业: docker 来装一个tomcat

官方的使用

docker run -it --rm tomcat:9.0
#我们之前的启动都是后台,停止了容器之后,容器还是可以查到 docker run -it --rm,一般用来测试,用完就删除

下载在启动

docker pull tomcat			# 自动拉取最新版
docker pull tomcat:9.0		# 拉去指定版本

启动运行

docker run -d -p 3355:8080 --name tomcat01 tomcat

// 有个小问题,如果需要创建的镜像不是最新版本需要制定版本号,应该使用以下代码
docker run -d -p 3355:8080 --name tomcat01 tomcat:9.0

测试访问没有问题

docker exec -it tomcat01 /bin/bash

进入容器发现是被阉割过的

  • linux命令少了
  • 没有webapps
  • 只保证最小可运行环境

如果每次部署项目都与要配置容器很麻烦,不便利,是否可以在容器外提供一个映射路径,webapps,我们在外部防止项目,自动同步到内部就好了!!!

挂载资源

需求:数据持久化
方式一:直接挂载
docker run -it -v 主机目录:容器内目录

通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。

#测试
docker run -it -v /home/ceshi:/home centos /bin/bash
(数据只有一份,双享绑定)
在这里插入图片描述

-d		后台运行
-p		端口映射
-v		卷挂载
-e		环境配置
--name	容器名称

指定目录创建mysql
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

Dockerfile

编写Dockerfile

#创建一个dockerfile文件,名字可以随机 建议Dockerfile
#文件中的内容 指令(大写) 参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end-----"
CMD /bin/bash

# 此处为匿名挂载,生成的卷在主机中的/var/lib/docker/volumes/....(此处为随机目录编码)
# 此处每一个命令,都是镜像的一层

创建自己的镜像:

docker build -f dockerfile1 -t luo/centos:1.0 .

启动容器:

docker run -it --name docker01 luo/centos:1.0

假设创建镜像时没有挂载卷,要手动镜像挂在 -v 卷名:容器内路径!!!
(卷名可以写相对目录,也可以写绝对目录以/开头)

启动多个容器,数据共享

docker run -it --name docker02 --volumes-from docker01 luo/centos:1.0

docker run -it --name docker03 --volumes-from docker01 luo/centos:1.0

在这里插入图片描述

双向绑定到docker01容器,即使停掉docker01另外两个容器中也有数据

结论:
容器的生命周期一直持续到没有容器使用为止,一旦持久化到本地,本地数据是不会删除的

Dockerfile搭建自己镜像

在这里插入图片描述
DockerFile:构建文件,定义了一切的步骤,源代码;
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品;
Docker容器:容器就是镜像运行起来提供服务的

DockerFile指令

FROM		# 基础镜镜像,一切从这里开始构建
MAINTAINER	# 镜像是谁写的,姓名+邮箱
RUN			# 镜像构建的时候需要运行的命令
ADD			# 步骤: tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR		# 镜像的工作目录
VOLUME		# 挂载的目录
EXPOSE		# 保留端口配置
CMD			# 指定这个容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT  # 指定这个容器启动时要运行的命令,可以追加命令
ONBUILD		# 当构建一个被继承DockerFile这个时候就会运行ONBUILD 的指令。触发指令。
COPYE		#类似ADD ,将我们文件拷贝到镜像中
ENV			#构建的时候设置环境变量!

在这里插入图片描述
在这里插入图片描述

  • 创建dockerfile
    mydockerfile-centos
FROM centos:7	#必须要加版本号
MAINTAINER luo<2542590210@qq.com>
ENV MYPATH /usr/local

WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end---"
CMD /bin/bash
  • 运行测试
    docker run -it mycentos:0.1
    可以在容器中运行实现vim和ifconfig指令
CMD				# 只有最后一个指令会生效,可被替代
ENTRYPOINT		# 会在后面追加指令

Docker网络

清空所有环境
docker rmi -f $(docker images -aq)

删除所有dangling数据卷(即无用的Volume,僵尸文件)
docker volume rm $(docker volume ls -qf dangling=true)

查看docker占用的空间
docker system df

docker容器虚拟化与传统虚拟机比较

相同:

  • 容器和虚拟机具有相似的资源隔离和分配优势

不同:

  • 容器虚拟化的是操作系统,虚拟机虚拟化的是硬件。
  • 传统虚拟机可以运行不同的操作系统,容器只能运行同一类型操作系统

docker部署mysql注意问题

  1. 启动mysql服务后,如果来连接不上
  2. 需要进入容器中
docker exec -it mysql /bin/bash
  1. 登录mysql
mysql -u root -p 
  1. 接下来输入下面命令设置并修改root 可以通过任何客户端连接即可。
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

flush privileges;# 刷新权限

在这里插入图片描述

建立映射目录

1、建立目录映射,创建配置文件

mkdir /home/mysql
mkdir /home/mysql/conf/
mkdir /home/mysql/logs/
mkdir /home/mysql/data/

touch /home/mysql/my.cnf
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
 
[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
docker run --restart=always --privileged=true  \
-v /home/mysql/data/:/var/lib/mysql \
-v /home/mysql/logs/:/var/log/mysql \
-v /home/mysql/conf/:/etc/mysql \
-v /home/mysql/my.cnf:/etc/mysql/my.cnf  \
-p 3306:3306 --name my-mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值