yum包更新到最新
1sudo yum update
安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
x
1sudo yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源为阿里云
x
1sudo yum-config-manager --add-rep http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
2sudo yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
安装docker
x
1#查看可用版本
2sudo yum list docker-ce --showduplicates | sort -r
3#只安装docker engine
4sudo yum install docker-ce
5#安装docker engine,docker cli,docker compose
6sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
7#安装docker指定版本,即包名称 ( docker-ce) 加上版本字符串(第 2 列),从第一个冒号 ( :) 开始,一直到第一个连字符,用连字符 ( -) 分隔。例如,docker-ce-18.09.1。
8sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin
9#如果没有安装成功docker compose则通过以下命令来安装
10sudo yum -y install docker-compose
11#设置开机启动
12systemctl start docker
13systemctl enable docker
安装后查看docker版本
xxxxxxxxxx
11docker -v
设置ustc的镜像
ustc是老牌的linux镜像服务器提供者了,还在遥远的ubuntu5.04版本的时候就在用,ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务
http://lug.ustc.edu.cn/wiki/mirrors/help/docker
编辑该文件:
x
1vi /etc/docker/daemon.json
如果是刚安装成功是没有这个文件的,添加该文件:
xxxxxxxxxx
31sudo mkdir docker
2sudo touch /etc/docker/daemon.json
3-- 如果docker启动不起来则将daemon.json的名称改为daemon.conf
在该文件中输入如下内容:
xxxxxxxxxx
31{
2 "registry.mirrors":["https://docker.mirrors.ustc.edu.cn"]
3}
卸载docker引擎
xxxxxxxxxx
111sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
2sudo yum remove docker \
3 docker-client \
4 docker-client-latest \
5 docker-common \
6 docker-latest \
7 docker-latest-logrotate \
8 docker-logrotate \
9 docker-engine
10sudo rm -rf /var/lib/docker
11sudo rm -rf /var/lib/containerd
启动docker
xxxxxxxxxx
11systemctl start docker
停止docker
xxxxxxxxxx
11systemctl stop docker
重启docker
xxxxxxxxxx
11systemctl restart docker
开机自启动
xxxxxxxxxx
11systemctl enable docker
查看docker状态
xxxxxxxxxx
11systemctl status docker
查看docker概要信息
xxxxxxxxxx
11docker info
查看docker帮助文档
xxxxxxxxxx
11docker --help
镜像相关命令
查看镜像
xxxxxxxxxx
21docker images
2docker image ls
REPOSITORY,镜像名称 TAG,镜像标签 IMAGE ID,镜像ID CREATED,镜像创建时间(不是获取该镜像的日期) SIZE,镜像大小 这些镜像都是存储在docker宿主机的/var/lib/docker目录下
搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
xxxxxxxxxx
11docker search imageName
NAME,仓库名称 DESCRIPTION,镜像miaos STARS,用户评价,反应一个镜像的受欢迎程度 OFFICIAL,是否官方 AUTOMATED,自动构建,表示该镜像由docker hub自动构建流程创建的
问题:
在搜索镜像的时候会报错:
xxxxxxxxxx
11Error response from daemon: Get https://index.docker.io/v1/search?q=centos&n=25: dial tcp: lookup index.docker.io on 192.168.78.2:53: no such host
解决(dig解析域名信息)
xxxxxxxxxx
11dig @114.114.114.114 index.docker.io
如果该命令提示
xxxxxxxxxx
11-bash: dig: 未找到命令
则执行
xxxxxxxxxx
11yum -y install bind-utils
然后在执行
xxxxxxxxxx
11dig @114.114.114.114 index.docker.io
得到一个IP地址
xxxxxxxxxx
81index.docker.io. 35 IN CNAME elb-io.us-east-1.aws.dckr.io.
2elb-io.us-east-1.aws.dckr.io. 663 IN CNAME us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com.
3us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 35 IN A 50.16.172.3
4us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 35 IN A 54.81.26.184
5us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 35 IN A 3.220.75.233
6us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 35 IN A 34.193.164.221
7us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 35 IN A 52.3.104.67
8us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 35 IN A 54.236.224.26
然后将任意一个IP地址写入
xxxxxxxxxx
11vi /etc/hosts
内容为
xxxxxxxxxx
1154.236.224.26 index.docker.io
最后搜索镜像成功。
拉取镜像
拉取镜像就是从中央仓库中下载镜像到本地
xxxxxxxxxx
11docker pull 镜像名称
例如,我要下载centos 7镜像
xxxxxxxxxx
11docker pull centos:7
此处冒号后面的为tag
删除镜像
按镜像ID删除
xxxxxxxxxx
11docker rmi 镜像ID
例如,我要删除centos 7镜像
xxxxxxxxxx
11docker rmi centos:7
删除所有镜像
xxxxxxxxxx
21docker rmi `docker images -q`
2docker rmi -f $(docker image ls)
容器相关命令
查看容器
查看正在运行的容器
xxxxxxxxxx
11docker ps
查看所有容器
xxxxxxxxxx
21docker ps -a
2docker ps -a --no-trunc
查看最后一次运行的容器
xxxxxxxxxx
11docker ps -l
查看停止的容器
xxxxxxxxxx
11docker ps -f status=exited
创建于启动容器
创建容器命令
xxxxxxxxxx
11docker run 镜像名称(或者镜像ID)
-i,表示运行容器
-t,表示容器启动后会进入起命令行,加入这两个参数后,容器创建就能登录进行,即分配一个伪终端
--name,为创建的容器命令
-v,表示目录映射关系(前者是宿主机目录,后者是映射到宿主机的容器目录),可以使用多个-v做多个目录或文件映射,注意,最好做目录映射,在宿主机上做修改,然后共享到容器上
-d,在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登陆容器,如果只加-i,-t两个参数,创建后就会自动进去容器)
-p,表示端口映射,前者是宿主机端口,后者是容器内的映射端口,可以使用多个-p做多个端口映射
-e,代表添加环境变量 (1)交互式方式创建容器
xxxxxxxxxx
21docker run -it --name=容器名称 镜像名称:标签 /bin/bash
2docker run -it --name=mycentos centos:7 /bin/bash
这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态 退出当前容器
xxxxxxxxxx
11exit
(2)守护式方式创建容器
xxxxxxxxxx
11docker run -di --name=容器名称 镜像名称:标签
登陆守护式容器方式:
xxxxxxxxxx
11docker exec -it 容器名称(或者容器ID) /bin/bash
停止与启动容器
停止容器
xxxxxxxxxx
11docker stop 容器名称(或者容器ID)
启动容器
xxxxxxxxxx
11docker start 容器名称(或者容器ID)
文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令
xxxxxxxxxx
21docker cp 需要拷贝的文件或目录 容器名称:容器目录
2docker cp anaconda-ks.cfg mycentos2:/usr/local/
也可以将文件从容器内拷贝出来
xxxxxxxxxx
21docker cp 容器名称:容器目录 需要拷贝的文件或目录
2docker cp mycentos2:/usr/local/anaconda-ks.cfg anaconda-ks2.cfg
目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器添加-v参数后边为宿主机:容器目录,例如
xxxxxxxxxx
11docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
默认挂载的路径权限为读写。如果指定为只读可以用:ro,如:/usr/local/myhtml:/usr/local/myhtml:ro
如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为centos7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true来解决挂载的目录没有权限的问题
查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据
xxxxxxxxxx
11 docker inspect 容器名称(或者容器ID)
也可以直接执行下面的命令直接输出IP地址
xxxxxxxxxx
21 docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
2 docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos3
删除容器
删除指定的容器
xxxxxxxxxx
11 docker rm 容器名称(容器ID)
运行中的容器不能被删除,要先停止运行中的容器
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
对于开发人员:可以为开发团队提供一个完全一致的开发环境
对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了
对于运维人员:在部署时。可以实现应用的无缝移植
命令 | 作用 |
---|---|
FROM image_name:tag (eg. centos:7) | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name (eg. itcast) | 声明镜像的创建者 |
WORKDIR path_dir(eg. /usr) | 设置工作目录 |
RUN command(eg. mkdir /usr/local/java) | 在构建镜像时执行的命令,是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file(eg. jdk-8u251-linux-x64.tar.gz /usr/local/java/) | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
ENV key value(eg. JAVA_HOME /usr/local/java/jdk1.8.0_251) | 设置环境变量(可以写多条) |
LABEL key="value" (eg. name="itcrazy2016") | 设置标签 |
VOLUME load_dir (eg. /var/lib/mysql) | 指定数据的挂在目录,当我们生成镜像的Dockerfile中以Volume声明了匿名卷,并且我们以这个镜像run了一个容器的时候,docker会在安装目录下的指定目录下面生成一个目录来绑定容器的匿名卷,就是说当Dockerfile中声明了匿名卷,但是run的时候没有使用-v 绑定匿名卷的话,那么docker就会在安装docker的机器/var/lib/docker/volumes这个目录下创建一个目录来绑定匿名卷 |
CMD command(eg. ["mysql"]) | 容器启动的时候默认会执行的命令,若有多个CMD命令,则最后一个生效 格式1: CMD <command> (shell格式)格式2: CMD ["executable", "param1", "param2"] (exec格式,推荐使用)格式3: CMD ["param1", "param2"] (为ENTRYPOINT指令提供参数) |
ENTRYPOINT command(eg. ["docker-entrypoint.sh"]) | 和CMD的使用类似,和CMD的不同的是docker run执行时,CMD会覆盖之前的命令,而ENTRYPOINT不会 格式1: ENTRYPOINT <command> (shell格式)格式2: ENTRYPOINT ["executable", "param1", "param2"] (exec格式,推荐格式) |
EXPOSE port(eg. 3306) | 指定镜像要暴露的端口,启动镜像时,可以使用-p将该端口映射给宿主机 |
使用docker build -t image_name:tag .
来构建镜像,默认使用PATH/Dockerfile
文件来构建,但是可以通过-f Dockerfile全路径来指定Dockerfile文件。
Dockerfile中RUN pwd无效时,在 docker build
命令前面增加 DOCKER_BUILDKIT=0
拉取mysql镜像
xxxxxxxxxx
11docker pull centos/mysql-57-centos7
创建容器
x
1docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
2
3--例如
4docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7
5docker run -di --name mysql -p 3306:3306 -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='1qaz!QAZ' mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
-p,代表端口映射,格式为宿主机映射端口:容器运行端口
-e,代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
进入mysql容器
xxxxxxxxxx
11docker exec -it tensquare_mysql /bin/bash
登陆mysql
xxxxxxxxxx
11mysql -u root -p
远程登陆mysql
xxxxxxxxxx
11 mysql -uroot -p
在输入密码的界面直接回车就可以了
拉取tomcat镜像
xxxxxxxxxx
11docker pull tomcat:7-jre7
tomcat:7代表tomcat的版本,jre7表示jre的版本
创建容器
xxxxxxxxxx
11docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
拉取nginx镜像
1docker pull nginx
tomcat:7代表tomcat的版本,jre7表示jre的版本
创建容器
1docker run -di --name=mynginx -p 80:80 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
拉取redis镜像
xxxxxxxxxx
11docker pull redis
创建容器
x
1docker run -d --name redis -p 6379:6379 -v /data/redis:/data -v /data/redis/conf/:/usr/local/etc/redis/ redis:latest redis-server --appendonly yes --requirepass '1qaz!QAZ' /usr/local/etc/redis/redis.conf --save 60 1 --loglevel warning
xxxxxxxxxx
21docker pull consul
2docker run -di --name=consul -p 8500:8500 --restart=always consul:latest agent -server -bootstrap -ui -node=consul1 -client='0.0.0.0'
https://learn.hashicorp.com/tutorials/consul/docker-container-agents?in=consul/docker
1version"2"
2
3services
4 zookeeper
5 container_name zookeeper
6 image docker.io/bitnami/zookeeper3.8
7 network_mode bridge
8 ports
9"2181:2181"
10 volumes
11"/data/bitnami/zookeeper:/bitnami/zookeeper"
12 environment
13 ALLOW_ANONYMOUS_LOGIN=yes
14 kafka
15 container_name kafka
16 image docker.io/bitnami/kafka3.2
17 network_mode bridge
18 ports
19"9092:9092"
20 volumes
21"/data/bitnami/kafka:/bitnami/kafka"
22 environment
23 KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
24 KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
25 KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
26 ALLOW_PLAINTEXT_LISTENER=yes
27 depends_on
28 zookeeper
29 links
30 zookeeper
xxxxxxxxxx
11docker-compose [up -d] [-f filename.yml]
xxxxxxxxxx
11./configure --prefix=/usr/local/openresty --with-luajit --without-http_redis2_module --with-http_iconv_module --with-http_sub_module --with-openssl=../openssl-3.0.4
xxxxxxxxxx
151wget -nc --no-check-certificate https://www.openssl.org/source/openssl-3.0.2.tar.gz -P /usr/local/src
2tar -zxvf /usr/local/src/openssl-3.0.2.tar.gz -C /usr/local/src
3cd /usr/local/src/openssl-3.0.2 || exit
4
5yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
6./config --prefix=/usr/local/ssl/
7make -j 4
8make install
9mv /usr/bin/openssl /usr/bin/openssl.old
10mv /usr/include/openssl/ /usr/include/openssl.old
11ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
12ln -s /usr/local/ssl/include/openssl /usr/include/openssl
13echo "/usr/local/ssl/lib64/" >> /etc/ld.so.conf
14ldconfig
15openssl version
xxxxxxxxxx
11docker run -di --name=minio -p 9000:9000 -p 9999:9999 -v /data/minio:/data -v /etc/minio/config:/root/.minio -e MINIO_ROOT_USER=admin -e MINIO_ROOT_PASSWORD=Admin123456 minio/minio server /data --console-address ":9999"
dockercarlosr
1qaz!QAZ2wsx@WSX