部署Docker以及基础命令

一、安装一个Docker

1、配置一个Docker的yum源

#这里我们使用阿里云的yum源
┌─[localhost][~]
└──╼ cat /etc/yum.repos.d/docker.repo 
[docekr]
name=docker-centos7.7
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7.7/x86_64/stable/
enabled=1
gpgcheck=0

2、安装Docker-ce(社区免费版)

#这里我们安装Docker社区免费版
yum install -y docker-ce 
#安装完之后给Docker更换国内的镜像仓库
┌─[localhost][~]
└──╼ cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://mch6oeq2.mirror.aliyuncs.com"]
}
#将docker设置为开机自启
┌─[localhost][~]
└──╼ systemctl enable --now docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
#查看服务是否启动
┌─[localhost][~]
└──╼ systemctl status docker
#docker的第一个镜像
┌─[localhost][~]
└──╼ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

二、Docker中的一些基础操作

1、运行第一个容器

#查看自己本地的镜像有哪些
┌─[localhost][~]
└──╼ docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   2 years ago   13.3kB
#我们可以拉取一个nginx进行做一个测试
┌─[docker-node1][~]
└──╼ docker pull nginx:1.24
#将这个进行进行容器化运行
┌──[docker-node1][~]
└──╼ docker run -tid -p 8080:80 nginx:1.24
6c31e61a8908a197cd82a9a134d2be9918fcde0636d7d4f44b0eeb4e02c7d571
# 参数解释:
    t:在新创建的容器中运行一个伪终端(pseudo-TTY)。
    i:以交互模式运行容器,通常与-t选项一起使用。
    d:以后台模式运行容器,并返回容器ID。
	-p: 物理机端口:容器内业务端口    将Nginx服务发布到物理机的端口上
#查看有哪些容器正在运行
┌─[docker-node1][~]
└──╼ docker ps 
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS         PORTS                                   NAMES
6c31e61a8908   nginx:1.24   "/bin/sh -c '/usr/lo…"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   relaxed_mcclintock
# 参数:
	ps : 将运行状态的容器显示出来
	ps -a :将所有的容器显示出来,包括已经退出或者暂停的容器
#测试一下是没有问题的
┌─[docker-node1][~]
└──╼ curl 192.168.7.16:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
#进入容器内部,注意一般的容器内部是没有类似与修改的这些“写”功能
┌─[docker-node1][~]
└──╼ docker exec -ti 6c bash
[root@6c31e61a8908 /]# ls 
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
#参数解释:
	exec :表示在容器中执行一个命令
	-ti :交互式操作
	bash :新开一个终端仓库进行操作。

2、docker的一些基础操作以及命令

#查看容器的详细信息,报错容器的IP地址等等
┌─[docker-node1][~]
└──╼ docker inspect 容器名称/容器ID
#删除一个正在运行的容器
┌─[docker-node1][~]
└──╼ docker rm -f 容器名称/容器ID
	-f : 强制删除
#删除本地的docker镜像
┌─[docker-node1][~]
└──╼ docker rmi 镜像名称:版本号/镜像的ID
Deleted: sha256:9db08c5108aa3f93920884cee3b6074f6b6265cb9e7100682892b0ac3bbbded4
#将容器打包成一个本地镜像
┌─[docker-node1][~]
└──╼ docker commit relaxed_mcclintock nginx_test:1.24
sha256:5c0aad3fc637023e1c93d324f4329a254b6d91c04f0b9e8b22c6f1f45e15f227
#docker commit 容器名称 镜像名称:标签
#将一个本地的镜像tar包加载到本地的docker镜像
┌─[docker-node1][~]
└──╼ docker import tar包名称
#将本地的一个容器打包成一个镜像
┌─[docker-node1][~]
└──╼ docker export relaxed_mcclintock > nginx_test.tar
#docker中停止一个容器
┌─[docker-node1][~]
└──╼ docker stop 6c
#查看自己Docker的版本
┌─[docker-node1][~]
└──╼ docker --version
# 查看容器的日志信息
┌─[docker-node1][~]
└──╼ docker logs 容器名称/容器ID

3、Docker中创建容器时的一些参数设置

# docker run [选项] 镜像 [命令]
#选项:
--name: 容器的名称
--hostname:容器内部主机名称
-v 本地目录路径:	容器内部目录路径 :对容器内部的某个数据目录做数据持久化存储。(也可以用来做配置文件的修改)
-p 本地端口:容器内部端口 : 将容器内部的服务端口发布到本地物理机的端口上,做一个端口映射
-P 容器端口:	对容器内部的服务端口做一个随机端口的映射
-e 变量名称=变量值:	在创建容器的时候为容器内部的变量指定值
--cpus cpu数量 :	做资源限制只能使用一个cpu
--memory 1G :	做资源限制只能使用1G内存
--link 容器主机:别名 --> 如果容器创建的时候使用的是默认的网络模式,那么容器之间通信只能使用别名进行通信
--net=网络模式:	指定容器的网络模式
# 注意:容器的Ip地址不是固定的,所以需要使用别名进行绑定,如果IP发生变化,那么别名所绑定的Ip也会发生变化
--restart = 重启策略 
1、no:默认策略,容器退出后不自动重启
2、always:	无论容器是以什么状态退出,Docker都会重启它
3、unless-stopped: 除非是用户手动停止容器,否则在容器退出时总是重启
4、on-failure:	只有当容器非正常退出时,Docker才会重启容器

三、Docker的网络

1、Docker的网络工作模式介绍

1、bridge网络模式:相当于我们vmware的NAT模式:

	SNAT:容器可以借助SNAT来访问外部的网络,物理机开启路由转发功能
	网关为docker 0(可以使用ip a进行查看)
	iptables的NAT表中的prerouting链
	
	DNAT:做端口映射。
	如-p和-P其实就是顶层调iptables来进行发布端口。
	注意:在端口映射的时候千万不可以与物理机当前的端口发生冲突。

2、host网络模式:容器和物理共享同一个网络命令空间。

	所有的网络参数和物理机一样,容器喝物理机共用一个IP。
	
	这个网络模式让我们在发布服务的时候不需要做端口映射
	
3、container网络模式:

	新建立的容器会和一个已有的容器(注意这个容器的网络模式必须是bridge)共享同一个IP;

	通信的效率会增加,减少了网络的消耗(arp消耗、tcp连接消耗)

4、none网络模式

	容器不会有自己的网络命名空间,容器建立出来之后网卡啥的都没有,不能与其他容器或者物理机进行通信。

2、网络测试

2、1 Host网络

┌─[docker-node1][~]
└──╼ docker run -tid --net=host nginx:1.24
#指定容器的网络模式为host
┌─[docker-node1][~]
└──╼ netstat -tlnup | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5105/nginx: master
#可以看到容器和主机使用了同一个网络命名空间

#访问测试
┌─[docker-node1][~]
└──╼ curl localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>

2.2、container网络

┌──[docker-node1][~]
└──╼ docker run -tid --net=container:ff03 nginx:1.24
#和已有的一个bridge网络模式的容器进行网络命名空间绑定
#注意:就算是共享网络命名空间,也要注意两个容器之间的端口冲突
┌─[docker-node1][~]
└──╼ docker inspect focused_burnell | grep -i "networkmode"
            "NetworkMode": "container:ff031f089a6ca7b932233d464390176096d39895becd748202c25386f4ca4921",

2.3、none网络

┌──[docker-node1][~]
└──╼ docker run -tid --net=none:ff03 nginx:1.24
#验证
┌──[docker-node1][~]
└──╼ docker inspect condescending_benz | grep -i "networkmode"
            "NetworkMode": "none",
  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值