docker基础

一.安装docker

1.准备工作
[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# setenforce 0
2.执行安装命令
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#安装docker-ce的最新稳定版本,建议软件还是安装最新的

[root@localhost ~]# yum install docker-ce -y  
3.查看docker版本
[root@localhost ~]# docker version
4.启动docker服务
[root@localhost ~]# systemctl start docker

[root@localhost ~]# systemctl enable docker   #设置docker服务开机自启动
5.查看docker是否启动
#通过ps命令查看docker服务是否正常启动
ps -ef | grep docker

#通过systemctl命令查看docker服务是否正常启动
systemctl status docker
6.配置Docker镜像源
#由于docker镜像源默认是国外的Dockerhub,拉取镜像速度比较慢,所以要配置国内的Docker镜像源

[root@localhost docker]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
[root@localhost docker]# systemctl restart docker

二.Docker服务相关命令

1.启动docker服务
systemctl start docker
2.停止docker服务
systemctl stop docker
3.重启docker服务
systemctl restart docker
4.查看docker服务状态
systemctl status docker
5.开机启动docker服务
systemctl enable docker

三.Docker镜像相关命令

1.查看镜像
#查看本地的所有镜像
docker images

#查看所有镜像的id
docker images -q

#查看所用镜像的id
docker images -q 镜像名称
2.搜索镜像
docker search 镜像名称
3.拉取镜像
#拉取最新镜像
docker pull 镜像名称

#拉取指定版本镜像
docker pull 镜像名称:版本号
4.删除镜像
#删除指定本地镜像
docker rmi 镜像id

#删除本地所有镜像
docker rmi `docker images -q`

四.Docker容器相关命令

1.查看容器
#查看正在运行的容器
docker ps 

#查看所有容器
docker ps -a 
2.创建并启动容器
#参数说明
-i:保持容器运行。通常与-t同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
-t:为容器重新分配一个伪输入终端,通常与-i同时使用。
-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec进入容器。退出后,容器不会关闭。 
-it:创建的容器一般称为交互式容器
-id:创建的容器一般称为守护式容器
--name:为创建的容器命名。

#创建并启动容器
docker run 参数
3.进入容器
#退出容器,容器不会关闭
docker exec 参数
4.停止容器
docker stop 容器名称
5.启动容器
docker start 容器名称
6.删除容器
docker rm 容器名称

#如果容器是运行状态则删除失败,需要停止容器才能删除
7.查看容器信息
docker inspect 容器名称

五.Docker容器的数据卷

1.配置数据卷
#创建启动容器时,使用-v参数设置数据卷

docker run ... -v宿主机目录(文件):容器内目录(文件)

#注意事项:
1.目录必须是绝对路径
2.如果目录不存在,会自动创建
3.可以挂载多个数据卷
2.配置数据卷容器
#1创建启动c3数据卷容器,使用-v参数设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash

#2创建启动c1 c2容器,使用--volumes-from参数设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
3.数据卷小结
#1.数据卷概念
	宿主机的一个目录或文件
#2.数据卷作用
	容器数据持久化
	客户端和容器数据交换。容器间数据交换
#3.数据卷容器
	创建一个容器,挂载一个目录,让其他容器继承自该容器(--volume-from)。
	通过简单方式实现数据卷配置。

六.Docker应用部署

1.部署MySQL
#1.搜索mysql镜像
docker search mysql

#2拉取mysql镜像
docker pull mysql

#3.在/root目录下创建mysql目录,用于存储mysql数据信息
mkdir /root/mysql	

cd /root/mysql

#4.创建容器,设置端口映射、目录映射
docker run -id -p 3306:3306 --name=c_mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

#参数说明:
-p 3307:3306						#将容器的3306端口映射到宿主机的3307端口。
--name=c_mysql 						#配置容器名称
-v $PWD/conf:/etc/mysql/conf.d		#将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf。配置目录
-v $PWD/logs:/logs					#将主机当前目录下的logs目录挂载到容器的/logs。日志目录
-v $PWD/data:/var/lib/mysql			#将主机当前目录下的data目录挂载到容器的/var/lib/mysql。数据目录
-e MYsQL_ROOT_PASSWORD=123456		#初始化 root用户的密码。
mysql:latest						#mysql容器版本

#5.验证mysql是否部署成功
docker exec -it c_mysql /bin/bash

mysql -uroot -p123456
2.部署Tomcat
#1.搜索tomcat镜像
docker search tomcat

#2.拉取tomcat镜像
docker pull tomcat


#3.在/root目录下创建tomcat目录,用于存储tomcat数据信息
mkdir /root/tomcat	

cd /root/tomcat

#4.创建容器,设置端口映射、目录映射
docker run -id --name=c_tomcat -p 8080:8080 -v $PWD:/usr/local/tomcat/webapps tomcat

参数说明:
#8080:将容器的8080端口映射到主机的8080端口
-p 8080
#将主机中当前目录挂载到容器的webapps
-v $PWD:/usr/local/tomcat/webapps  

#5.验证Tomcat是否部署成功
docker exec -it c_tomcat  /bin/bash

mkdir /root/tomcat/test

echo "<h1> hello tomcat, success </h1>" > /root/tomcat/test/index.html

http://10.0.0.101:8080/test/index.html
3.部署Nginx
#1.搜索nginx镜像
docker search nginx

#2拉取nginx镜像
docker pull nginx

#3.在/root目录下创建nginx目录用于存储nginx数据信息
mkdir -p /root/nginx/conf

cd /root/nginx/

mkdir logs html

#编辑配置文件
vim /root/nginx/conf/nginx.conf	

-------------------在/opt/nginx/conf下创建nginx.conf文件,粘贴下面内容. --------------------
user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
  
events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;
    autoindex  on;
    #gzip  on;  
    client_max_body_size         100M;
    client_header_buffer_size     128k; 
    large_client_header_buffers  4  128k;  


    include /etc/nginx/conf.d/*.conf;
 
}
---------------------------------------------------------------------------------------
#4.创建容器,设置端口映射、目录映射

docker run -id -p 80:80 --name=c_nginx -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/var/log/nginx -v $PWD/html:/usr/share/nginx/html nginx

#注: $PWD=/root/nginx/

参数说明:
#将容器的80端口映射到宿主机的80端口。
-p 80:80	
#将主机当前目录下的logs目录挂载到容器的/var/log/nginx。日志目录
-v $PWD/logs:/var/log/nginx
#将主机当前目录下的html目录挂载到容器的/usr/share/nginx/html。html目录
-v $PWD/html:/usr/share/nginx/html
#将主机当前目录下的/conf/nginx.conf挂载到容器的:/etc/nginx/nginx.conf。配置目录
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf

#5.验证nginx是否部署成功
echo "<h1> hello nginx, success </h1>" > /root/nginx/html/index.html

http://10.0.0.101/
4.部署Redis
#搜索redis镜像
docker search redis

#拉取redis镜像
docker pull redis:latest

#创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:latest

#使用外部机器连接redis
D:\Software\Redis-x64-3.0.504>redis-cli.exe -h 10.0.0.101 -p 6379
10.0.0.101:6379> keys *
(empty list or set)
10.0.0.101:6379> set name local
OK
10.0.0.101:6379> get name
"local"
10.0.0.101:6379>

七.Dockerfile

1.容器转为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称
2.dockerfile
关键宁作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签用来标明dockerfile的标签可以使用Label代替Maintainer最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令默认是/bin/sh格式:RUN command或者RUN [“command” , “param1”,“param2”]
CMD容器启动命令提供启动容器时候的默认命令和ENTRYPOINT配合使用格式CMD command param1 param2或者CMD [“command”“param1”,“param2”]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中不仅仅局限于当前build上下文可以来源于远程服务
ENV环境变量指定build时候的环境变量可以在启动的容器的时候通过-e覆盖格式ENV name=value
ARG构建参数构建参数只在构建的时候使用的参数如果有ENV那么ENV的相同名字的值始终覆盖arg的参数
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中启动容器的时候使用-v绑定格式VOLUME[“目录”]
EXPOSE暴露端口定义容器运行的时候监听的端口启动容器的使用-p来绑定暴露端口格式:EXPOSE 8080或者EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录如果没有创建则自动创建如果指定/使用的是绝对地址如果不是/开头那么是在上—条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候用户在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令基本上没用因为很多时候应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候当执行FROM完成之后会执行ONBUILD的命令但是不影响当前镜像用处也不怎么大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT执行命令的时候使用的shell

八.创建私有仓库

1.私有仓库搭建
#拉取私有仓库镜像
docker pull registry

#启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry

#查询私有仓库是否创建成功
http://10.0.0.101:5000/v2/_catalog

#修改daemon.json
[root@localhost docker]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
  "insecure-registries": ["10.0.0.101:5000"]     
}
#重启docker服务
systemctl restart docker
docker start registry
2.将镜像上传至私有仓库
#标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器ip:5000/centos:7

#上传标记的镜像
docker push 私有仓库服务器ip:5000/centos:7
3.从私有仓库拉取镜像
#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值