Docker的搭建及基本命令
Centos8上安装Docker
Docker版本要求
1、要求 CentOs 系统的内核版本高于 3.10,可通过如下指令查看版本
uname -r
更新yum
安装docker ce即社区免费版,先安装必要的软件包,安装yum-utils,它提供一个yum-config-manager单元,同时安装的device-mapper-persistent-data和lvm2用于储存设备映射(devicemapper)必须的两个软件包。
sudo yum update
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
紧接着配置一个稳定(stable)的仓库 ,仓库配置会保存到/etc/yum.repos.d/docker-ce.repo文件中。此处我们使用阿里云。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新Yum安装的相关Docke软件包
sudo yum makecache fast#会出错
出现如下错误:
yum makecache: error: argument timer: invalid choice: ‘fast’ (choose from ‘timer’)
更新索引的时候出错,即centos8没有该参数,解决办法为:去掉fast参数
查看仓库版本,并指定版本安装
查看版本
yum list docker-ce --showduplicates | sort -r
安装
yum install docker-ce#会出错
出现如下错误:
Problem: package docker-ce-3:18.09.9-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
根据提示,需要containerd.io的版本 >= 1.2.2-3,操作如下
也有可能出现此错误
解决方式yum erase podman buildah
(1)安装wget指令
yum install wget
(2)获取rpm包
wget http://docker-release-purple-prod.s3-website-us-east-1.amazonaws.com/linux/centos/8/x86_64/edge/Packages/containerd.io-1.3.7-3.1.el8.x86_64.rpm
(3)升级containerd.io(安装rpm包)
yum -y install containerd.io-1.2.6-3.3.el7.x86_64.rpm
(4)重新安装docker-ce
yum install docker-ce
启动docker
(1)设置开机自启动
sudo systemctl start docker
sudo systemctl enable docker
(2)启动
sudo systemctl start docker
(3)验证
docker version
说明安装成功
或者
sudo docker ps
说明安装成功
(4)查看docker运行状态
systemctl status docker
Docker常用的命令
1、拉取镜像
docker pull ubuntu
2、首次启动镜像
docker run -it --name ubuntu-test ubuntu /bin/bash
参数说明:
- -i: 交互式操作。
- -t: 终端。
- -p:端口。
- -ip:指定IP。
- -v:数据卷。例如:-v /data:/data:ro。ro为容器只读。
- --volumes-from:数据卷来自于已有的容器。
- -name:容器名。
- ubuntu: ubuntu 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
3、启动已存在容器
docker start <容器 ID/Name>
docker restart 容器id1 [容器id2] [...] #重启
4、运行的docker容器列表
docker ps
docker ps –a
5、停止容器
docker stop <容器 ID/Name>
6、进入容器
docker exec -it name /bin/bash
从这个容器退出,不会导致容器的停止,推荐大家使用
7、查看容器的某些进程PID
doker top name
8、删除容器
docker rm name
9、镜像列表
docker images
10、启动所有容器
docker start $(docker ps -a -q)
11、复制文件到容器
docker cp sentinel.conf redis-master:/usr/local/redis
12、创建容器时指定IP
Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定。
在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定ip是必须的。
我们可以创建自己的bridge网络 : mynet,创建容器的时候指定网络为mynet并指定ip即可。
查看网络模式
docker network ls
创建一个新的bridge网络
docker network create --driver bridge --subnet=172.19.0.0/16 --gateway=172.19.0.1 dockercompose
查看网络信息
docker network inspect dockercompose
创建容器并指定容器ip
docker run -it --name sentinel1 --network=dockercompose --ip 172.19.0.6 -v /data/docker_redis/sentinel/sentinel-slave1.conf:/usr/local/redis/sentinel.conf -d -p 26380:26379 redis /bin/bash
13、创建快照
查看现有容器
docker ps/docker ps -a
创建容器快照
docker export ID > test.tar
导入并验证
cat 快照.tar | docker import - centos:latest
docker run -it ID(镜像) /bin/bash
14、查看数据卷相关信息
sdocker inspect -f {{.Volumes}} 容器名
构建容器(nginx为例)
一、手动构建
1、拉取镜像
docker pull centos
2、启动镜像
docker run --name nginx-man -it centos
3、安装相关依赖包
yum install -y wget gcc gcc-c++ make openssl-devel
4、安装nginx依赖
wget http://nginx.org/download/nginx-1.9.3.tar.gz
mv nginx-1.9.3.tar.gz /usr/local/data/nginx-1.9.3.tar.gz
cd /usr/local/data
5、解压
tar -zxf nginx-1.9.3.tar.gz
6、创建www用户
useradd -s /sbin/nologin -M www
7、启动nginx
./configure --prefix=/usr/local/data/nginx --user=www --group=www --with-http_ssl_moudle --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.37
8、make
make
make install
9、配置启动容器直接运行nginx
vi /usr/local/data/nginx/conf/nginx.conf
#添加,让其在前台运行
daemon off;
10、验证
exit#推出容器
docker commit -m "my nginx" 容器ID my-nginx1:vl
doker images
#发现已经有了新镜像
docker run -it -p 92:80 my-nginx1:v1 /usr/local/data/nginx/sbin/nginx
#可以循环添加想要的容器数量
在浏览器打开IP:92
可以看到nginx
11、容器自启
docker container update --restart=always 容器名
二、Dockerfile自动构建
- 基础镜像信息
- 维护者信息
- 镜像操作命令
- 容器启动时执行指令
创建文件
mkdir /opt/docker-file/nginx
cd /opt/docker-file/nginx
pwd
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
wget http://nginx.org/download/nginx-1.9.3.tar.gz
vim Dockerfile
内容如下:
#This is My first Dockerfile
#base images镜像
From centos
#MAINTTAINER维护者
MAINTAINER WangScaler
#ADD 往容器里放东西
ADD pcre-8.37.tar.gz /usr/lcoal/src
ADD nginx-1.9.3.tar.gz /usr/local/src
#RUN 执行指令
RUN yum install wget gcc gcc-c++ make openssl-devel
RUN useradd -s /sbin/nologin -M www
#WORKDIR
WORKDIR /usr/local/src/nginx-1.9.3
RUN./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_moudle --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.37
RUN echo "daemon off;">>/usr/local/src/nginx/conf/nginx.conf
#EXPOSE映射端口
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
注意:ADD的文件必须和Dockerfile在同一文件夹下
运行
docker build -t nginx-file:v1 /opt/dockerfile/nginx/
docker image 查看
三、使用Dockerfile创建python容器
编写应用所需要的依赖
requirements.txt内容如下
vim requirements.txt
WTForms==2.2.1
WTForms-JSON==0.3.3
wtforms-tornado==0.0.2
PyJWT==1.7.1
redis==3.5.1
motor==2.1.0
tornado==6.0.3
tornado-swagger==1.2.4
pytz==2020.1
paho-mqtt==1.5.0
requests==2.22.0
编写Dockerfile
vim Dockerfile
#This is My first Dockerfile
#base images镜像
FROM python:3.7.4
#MAINTTAINER维护者
MAINTAINER WangScaler
#ADD 往容器里放东西
ADD requirements.txt /usr/local/python-app/requirements.txt
#RUN 执行指令
WORKDIR /usr/local/python-app
RUN pip install -r requirements.txt
#EXPOSE映射端口
EXPOSE 8090
创建镜像
docker build -t python-apps .
查看网络模式
docker network ls
创建一个新的bridge网络
docker network create --driver bridge --subnet=172.19.0.0/16 --gateway=172.19.0.1 dockercompose
查看网络信息
docker network inspect dockercompose
创建容器并指定容器ip
docker run -it --name python-app --network=dockercompose --ip 172.19.0.2 -v /usr/local/python-app:/usr/local/python-app -d -p 8090:8090 python-apps /bin/bash
进入容器
docker exec -it python-app bash
四、Dockerfile创建python项目镜像
编写Dockerfile
vim Dockerfile
# 基于的基础镜像
FROM python:3.6.8
# 维护者信息
MAINTAINER WangScaler@163.com
# 代码添加到code文件夹
ADD / /ssm
# 设置code文件夹是工作目录
WORKDIR /ssm
# 安装支持
RUN cd /ssm && ls
RUN ls
RUN pip install --user -r /ziot/requirements.txt -i https://pypi.doubanio.com/simple/
RUN python CreateLicense.py 02:42:ac:22:00:02
RUN python setup.py
RUN python -m compileall -b build/
RUN find . -name "*.py" -type f -print -exec rm -rf {} \;
CMD ["python", "build/server.pyc"]
Each instruction creates one layer:
FROM
creates a layer from theubuntu:18.04
Docker image.COPY
adds files from your Docker client’s current directory.RUN
builds your application withmake
.CMD
specifies what command to run within the container.