Docker的搭建及基本命令

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Docker在centos8上的搭建过程,以及docker的基本命令,还有docker如何使用等等。

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’)

image-20200716140235904

更新索引的时候出错,即centos8没有该参数,解决办法为:去掉fast参数

image-20200716140315300

查看仓库版本,并指定版本安装

查看版本

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

image-20200716140735067

根据提示,需要containerd.io的版本 >= 1.2.2-3,操作如下

也有可能出现此错误

image-20210125133644001

解决方式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

image-20200716141504940

启动docker

(1)设置开机自启动

sudo systemctl start docker
sudo systemctl enable docker

(2)启动

sudo systemctl start docker

(3)验证

docker version

docker5.png
说明安装成功

或者

sudo docker ps

docker6.png

说明安装成功

(4)查看docker运行状态

systemctl status docker

docker7.png

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 the ubuntu:18.04 Docker image.
  • COPY adds files from your Docker client’s current directory.
  • RUN builds your application with make.
  • CMD specifies what command to run within the container.
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
26天前
|
安全 Docker 容器
|
26天前
|
网络安全 数据安全/隐私保护 Docker
|
25天前
|
存储 监控 安全
|
2月前
|
Linux Docker 容器
Docker操作 :容器命令
Docker操作 (四)
|
25天前
|
存储 关系型数据库 MySQL
|
1月前
|
网络协议 Docker 容器
docker pull命令拉取镜像失败的解决方案
docker pull命令拉取镜像失败的解决方案
819 1
|
1月前
|
安全 网络安全 开发者
Docker学习笔记(一):Docker命令总结
本文介绍了Docker的基本概念、优点以及常用命令。Docker是一个开源的应用容器引擎,它通过容器打包应用程序及其依赖项,实现快速部署和迁移。主要优点包括轻量级、可移植性、易于管理、安全性和开源性。文章还区分了镜像和容器的概念,并提供了构建镜像、查看容器、运行容器、停止和删除容器等常用Docker命令的示例。
129 0
|
1月前
|
Linux 网络安全 Docker
安装后无法使用 Docker 命令
【10月更文挑战第3天】
185 2
|
1月前
|
安全 Shell Linux
docker进入容器命令
docker进入容器命令
|
1月前
|
运维 数据库 开发者
docker回顾--docker compose详细解释,安装,与常用命令
docker回顾--docker compose详细解释,安装,与常用命令
115 1