一、安装Docker:
安装包下载地址:
Index of linux/static/stable/x86_64/
1.1 在Centos7进行安装前,可以使用以下命令查看CentOS版本。
cat /etc/redhat-release
1.2 在 CentOS 7安装docker要求系统为64位、系统内核版本为 3.10 以上。
uname -r
2.1 查看是否已安装docker列表
yum list installed | grep docker
2.2 安装docker
yum -y install docker
-y表示不询问安装,直到安装成功,安装完后再次查看安装列表
2.3 启动docker
systemctl start docker
2.4 查看docker服务状态
systemctl status docker
出现以上,说明docker安装成功!
2.5 查看docker版本
docker version
docker --version
2.6 设置docker开机关机和自启动
开机自启动:
systemctl enable docker
2.7 配置docker镜像,源:
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://ckib1ecu.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
二、使用Docker:
查看 docker的服务状态:
systemctl status docker
如果没有启动的话,要先启动 docker 服务:
systemctl start docker
1.从远程仓库拉取一个纯净的 centos 系统镜像
查询 centos 相关的镜像 docker search centos
下载镜像到本地 docker pull 镜像名
查看本地镜像 docker images
查看容器 docker ps
2.创建并进入容器
创建容器
格式:docker run -dit --name=容器名 镜像 id /bin/bas
查看所有容器
docker ps -a
进入容器
格式:docker exec -it 容器名 /bin/bash
3.操作容器
。。。。。。
4.安装好环境之后,退出容器
5.将容器制作成镜像
格式:docker commit -m '镜像描述' -a '制作者' 容器名 镜像名
6.将制作好的镜像打成 tar 包
格式:docker save -o tar包的名字 镜像名
7.将打包好的 tar 包传给别人
准备中!
新建一个本地目录:
mkdir pot
查看被发送主机的IP地址:
ifconfig ensXXX
准备好以后!
scp /opt/start.tar root@192.168.1.22:/pot/
格式:scp tar包所在路径 用户名@IP地址:要上传的路径
查看被上传主机中目录的文件:
已经传输成功!
8.别人接收到 tar 包之后,怎么使用 tar 包
准备中!
先删除原来的镜像:
docker rmi image-id(这里是id)
查看现有的镜像:
准备好以后!
格式:docker load < tar 包所在路径
查看现有的镜像:
镜像已导入!
9.使用镜像
1.查看本地镜像和容器
2.创建并运行容器
格式:docker run -dit --name=容器名 镜像 id /bin/bas
3.查看容器
注意:出现上上图中的警告,需要检查网络。
报错:WARNING: IPv4 forwarding is disabled. Networking will not work.
输入:sysctl net.piv4.ip_forward
显示:net.ipv4.ip_forward = 0
vim /etc/sysctl.conf
加入,代码:net.ipv4.ip_forward=1
重启网络:
systemctl restart network
4.进入容器
docker exec -it star /bin/bash
测试,网络通畅!
10.容器互联
Docker网络命令:
直连命令:
docker run -d -P --name tomcattomcatlink --link tomcat0 tomcat1
docker network ls
docker network inspect eceb5fc42b81( NETWORK ID)
docker inspect 6d2352ff3a24(CONTAINER ID)
docker network ls
解释:
bridge:桥接docker(默认,自己也使用bridge 模式)
none:不配置网络
host:和宿主机共享网络
container:容器网络连通!(用的少!局限很大)
默认建立网络:
docker run -d -P --name tomcat01 --net bridge tomcat
建立一个新的网络:
docker network create --driver bridge --subnet 192.18.0.0/16 --gateway 192.168.0.1 mynet
另一种方式建立一个新的网络:
docker network create setnet --subnet 172.38.0.0/16
查看网络:
docker network ls
解释:
--driver bidge
--subnet 192.168.0.0/16 (192.168.0.2-192.168.255.255)
--gateway 192.168.0.1
默认建立网络:
docker run -d -P --name tomcat01 --net bridge tomcat
建立一个新的网络:
docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 my
解释:
--driver bidge
--subnet 172.18.0.0/16 (192.18.0.2-172.18.255.255)
--gateway 192.168.0.1
查看这个网络配置:
docker network inspect my
创建容器并加入网络:
docker run -itd -p 18080:8080 --name ping10tomcat 69db17c4b420 /bin/bash
docker run -itd -p 180:80 --name ping10nginx 4333e660bcdf /bin/bash
ping能否通:
docker exec -it pingtomcatnet ping pingnginxnet
将容器加入这个网络:
docker network connect mydriver tomcat3
docker network connect mydriver nginx3
--
新建网络:
docker network create -d bridge test-net
连接容器:
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
在 /etc/docker/daemon.json 文件中配置 DNS:
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
注意:配置完,需要重启 docker 才能生效!
查看容器的 DNS:
docker run -it --rm ubuntu cat etc/resolv.conf
(略)手动配置容器配置DNS
备注:
启动:
systemctl start docker
停止:
systemctl stop docker
重启:
systemctl restart docker
停止所有docker容器
sudo docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
启动所有docker容器
sudo docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
删除容器,例:
docker stop (CONTAINER ID)
docker rm (NAMES)
不关闭强制删除容器:
docker rm -f (NAMES)
删除镜像:
docker rmi (image id)
修改容器名称,例:
docker rename start centos-test (原名称和修改名称)
打开容器,例:
docker start 48dd1e594672 (CONTAINER ID)
进入容器,例:
docker attach 44fc0f0582d9 (CONTAINER ID)
docker exec -it start(容器名称) /bin/bash
查看容器的进程
docker top 44fc0f0582d9 (CONTAINER ID)
查看容器的元数据
docker inspect e9352cd0faf5 (CONTAINER ID)
提交镜像
docker commit -m='run' -a='jacktree365' 920a879e7c94 start:start
备注:-m: 提交的描述信息\-a: 指定镜像作者\920a879e7c94 :容器 ID\start:start: 指定要创建的目标镜像名
修改镜像名称,例:
docker tag 63af60731612 ubuntu.io/test:latest(原IMAGEID和新REPOSITORY名称:新TAG名称)
要删除所有镜像
docker rmi $(docker images -q)
想要删除所有容器
docker rm $(docker ps -a -q)
设置容器重启后境像会自动开启:
方式一:Docker 命令修改
docker container update --restart=always start(容器名称)
方式二:直接改配置文件
首先停止容器,不然无法修改配置文件
配置文件路径为:/var/lib/docker/containers/容器ID
在该目录下找到一个文件 hostconfig.json ,找到该文件中关键字 RestartPolicy
修改前配置:"RestartPolicy":{"Name":"no","MaximumRetryCount":0}
修改后配置:"RestartPolicy":{"Name":"always","MaximumRetryCount":0}
最后启动容器。
(完)
三、关于Docker的备注:
操作docker:
==镜像类==
docker image search #查看镜像库
pull #拉取镜像
ls #查看本地镜像仓库
inspect #查看镜像详细信息
rm #删除镜像
save #导出镜像
load #导入镜像
==容器类==
docker container run #守护式开启容器
run -d #让容器守护进程的方式在后台启动
run -it #-it i 以交互方式,t 开启一个新的终端 tty
inspect #查看容器详细信息
start #启动容器
stop #关闭容器
restart #重启容器
kill #关闭容器,退出容器
rm #删除容器
ls #查看容器
ls -a #查看所有容器
ls -a -q #查看所有容器的ID
attach #进入守护式容器
exec #交互式启动,子进程方式登录容器
top #显示容器内进程运行情况
logs #容器日志
rm -f `docker container ls -a -q` #清除所有容器
一、docker images 命令
REPOSITORY :表示镜像的仓库源。
TAG :镜像的标签,通俗的讲就是该镜像的版本。latest代表最新版本。
IMAGE ID:镜像ID。
CREATED:镜像创建时间。
SIZE:镜像大小。
二、docker ps 命令
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
-
created(已创建)
-
restarting(重启中)
-
running 或 Up(运行中)
-
removing(迁移中)
-
paused(暂停)
-
exited(停止)
-
dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
3.Docker build 命令
docker build 命令用于使用 Dockerfile 创建镜像。
语法:
docker build [OPTIONS] PATH | URL | -
OPTIONS说明:
--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
--squash :将 Dockerfile 中所有的操作压缩为一层。
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置RUN指令的网络模式
4.Dockerfile命令
* **FROM** 指定基础镜像文件
* **MAINTAINER** 维护者的信息
* **RUN** 执行命令
* **EXPOSE** 对外暴露的端口
* **ADD** 复制文件到容器中,若是压缩文件会自动解压
* **COPY** 复制文件到容器中,若是压缩文件不会自动解压
* **WORKDIR** 改变工作目录
* **ENTRYPOINT** 运行容器时执行的命令(default 自启动)
dockerfile 的命令摘要:
- FROM- 镜像从那里来
- MAINTAINER- 镜像维护者信息
- RUN- 构建镜像执行的命令,每一次RUN都会构建一层
- CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数
- VOLUME- 定义数据卷,如果没有定义则使用默认
- USER- 指定后续执行的用户组和用户
- WORKDIR- 切换当前执行的工作目录
- HEALTHCHECH- 健康检测指令
- ARG- 变量属性值,但不在容器内部起作用
- EXPOSE- 暴露端口
- ENV- 变量属性值,容器内部也会起作用
- ADD- 添加文件,如果是压缩文件也解压
- COPY- 添加文件,以复制的形式
- ENTRYPOINT- 容器进入时执行的命令
Dockerfile指令详细说明版:
- FROM
构建镜像基于哪个镜像
- MAINTAINER
镜像维护者姓名或邮箱地址
- RUN
构建镜像时运行的指令
- CMD
运行容器时执行的shell环境
- VOLUME
指定容器挂载点到宿主机自动生成的目录或其他容器
- USER
为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
- WORKDIR
为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
- HEALTHCHECH
健康检查
- ARG
构建时指定的一些参数
- EXPOSE
声明容器的服务端口(仅仅是声明)
- ENV
设置容器环境变量
- ADD
拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
- COPY
拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
- ENTRYPOINT
运行容器时执行的shell命令
5.Docker的导入与导出:
import Import the contents from a tarball to create a filesystem image
load Load an image from a tar archive or STDIN
export Export a container's filesystem as a tar archive
save Save one or more images to a tar archive (streamed to STDOUT by default)
备注:
import 与 export 对应,一个导入一个导出;load 与 save 对应,一个导入一个导出。
详细讲解:
docker save 用来将一个或多个image打包保存
如:将本地镜像库中的image1和image2打包到images.tar中
docker save -o images.tag image1:v1 image2:v1
docker save 也可以打包container,保存的是容器背后的image.
docker load用于将打包的tar中包含的镜像load到本地镜像库,但不能重命名其中的镜像名。
docker load -i images.tar
例:
docker save imageID -o saveImageName.tar 或者 docker save imageID > saveImageName.tar
docker load -i saveImageName.tar 或者 docker load < saveImageName.tar
docker export 打包container文件系统
docker export -o thecontainer.tar container_name
使用 docker import 载入,可以为新镜像指定name和tag
docker import thecontainer.tar newimagename:tag
例:
docker export CONTAINER ID|NAME -o container_name.tar
docker import container_name.tar 或者 cat container_name.tar | docker import -repository:tag
总结:
docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,必须是一个分层文件系统,必须是是save的包;
docker import用来载入容器包,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
docker export的包会比save的包要小,原因是save的是一个分层的文件系统,export导出的只是一个linux系统的文件目录
docker 添加端口:
docker指令:docker run -p ip:hostPort:containerPort redis
使用-p参数会分配宿主机的端口映射到虚拟机。
IP表示主机的IP地址。
hostPort表示宿主机的端口。
containerPort表示虚拟机的端口。
支持的格式有三种:
ip:hostPort:containerPort:映射指定地址的指定端口到虚拟机的指定端口(不常用)
如:127.0.0.1:3306:3306,映射本机的3306端口到虚拟机的3306端口。
ip::containerPort:映射指定地址的任意端口到虚拟机的指定端口。(不常用)
如:127.0.0.1::3306,映射本机的3306端口到虚拟机的3306端口。
hostPort:containerPort:映射本机的指定端口到虚拟机的指定端口。(常用)
如:3306:3306,映射本机的3306端口到虚拟机的3306端口。
docker 修改容器端口映射
docker run -d -p 9999:8080 -i -name tomcat8 tomcat:8 主机9999端口映射到8080端口
方法1:
① 删除原有容器docker rm -f 容器名/ID
② 创建新容器:docker run -d -p 8080:8080 -i --name tomcat8 tomcat:8
缺点:相关配置被删除
方法2:修改配置文件
① 暂停docker服务 systemctl stop docker
② 进入docker配置文件目录下 cd /var/lib/docker/containers/ ls
③ 进入容器ID (ID为文件夹)
④ 修改hostconfig.json文件 vim hostconfig.json
⑤ 修改其中端口值9999为8080 保存退出:wq
⑥ 重启docker服务 systemctl start docker
缺点:暂停docker服务会影响其他容器
方法3:使用docker commit命令创建新镜像
① 停止容器服务 docker stop tomcat8
② 构建新镜像 docker commit tomcat8 tomcat8_new
③ 使用新镜像重新创建容器 docker run -d -p 8888:8080 -i --name tomcat88 tomcat8_new
④ 删除原有容器 docker rm tomcat8
⑤ 修改容器名称 docker rename tomcat88 tomcat8
优点:什么都不会丢,什么都不影响 缺点:管理镜像成本提升
docker 修改主机映射目录
docker run -d -p 9999:8080 -i -name tomcat8 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:8
同端口修改方法,方法2中修改的为config.v2.json 文件
docker命令不需要敲sudo的方法:
方法一:
1.创建一个docker组
$ sudo groupadd docker
2.添加当前用户到docker组
$ sudo usermod -aG docker $USER
3.登出,重新登录shell
4.验证docker命令是否可以运行
$ docker run hello-world
方法二:
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
docker ps #测试docker命令是否可以使用sudo正常使用
dcoker卸载的方法:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-ce
docker镜像的设置:
(配置阿里云docker镜像地址)
安装docker前需要安装的依赖包:
yum install -y yum-utils device-mapper-persistent-data lvm2
使用阿里国内源安装docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum makecache fast
yum install docker-ce -y
docker阿里云镜像加速器:
(针对Docker客户端版本大于 1.10.0 的用户)
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ckib1ecu.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
ifconfig命令的安装:
第一步:
cd /etc/sysconfig/network-scripts/
进入:
vi ifcfg-enoXXX(默尾替换)
修改文件中:
ONBOOT=yes
第二步:
service network restart
第三步:
yum provides ifconfig
第四步:
yum install net-tools
vim命令的安装:
使用rpm命名安装即可,如下:
yum -y install vim-minimal
yum -y vim-common
yum -y install vim-enhanced
缺少那个就安装那个,如果都没有,则使用如下命名一起安装:
yum -y install vim*
Linux同步时间:
1、安装ntp
yum install -y ntpdate
2、与一个已知的时间服务器同步
ntpdate time.nist.gov