这是我参与更文挑战的第1天,活动详情查看: 更文挑战
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.