安装Docker
centos6.8安装docker
1.安装依赖包 yum install -y epel-release
2.安装Docker yum install -y docker-io
3.查看配置文件 cat /etc/sysconfig/docker
4.启动后台服务 service docker start
5.查看版本 docker version
centos7安装docker
1.安装gcc yum -y install gcc gcc-c++
2.卸载旧版本 yum -y remove docker docker-common docker-selinux docker-engine
3.安装需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2
4.设置stable镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.更新yum软件包索引 yum makecache fast
6.安装docker yum -y install docker-ce
7.启动docker systemctl start docker
8.查看版本 docker version
9.配置镜像加速
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://lw6hnysy.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker
10.卸载docker
systemctl stop docker
yum -y remove docker-ce
rm -rf /var/lib/docker
常用命令
docker version
docker info
docker --help
docker images
docker search 某个XXX镜像名字
docker pull 镜像名字[:TAG]
docker rmi -f 镜像名1:TAG 镜像名2:TAG
docker start 容器ID或者容器名
docker restart 容器ID或者容器名
docker stop 容器ID或者容器名
docker kill 容器ID或者容器名
docker rm 容器ID
docker login -u username -p password server
Docker Hub:docker login -u username -p password
Aliyun:docker login -u username -p password registry.cn-beijing.aliyuncs.com
docker push server/namespace/image:tag
启动交互式容器: docker run -it centos /bin/bash
启动守护式容器: docker run -d -p 3306:3306 --name mysql01 mysql:5.6
查看容器日志: docker logs -f -t --tail 容器ID
查看容器内运行的进程: docker top 容器ID
查看容器内部细节: docker inspect 容器ID
进入正在运行的容器并以命令行交互: docker exec -it 容器ID /bin/bash
重新进入: docker attach 容器ID
从容器内拷贝文件到主机上: docker cp 容器ID:容器内路径 目的主机路径
docker login -u username -p password address(192.168.29.100:80)
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
--name="容器新名字": 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
docker ps [OPTIONS]
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。
退出容器:
exit: 容器停止退出
ctrl+P+Q: 容器不停止退出
Docker镜像commit操作:
docker commit提交容器副本使之成为一个新的镜像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
docker search tomcat
docker pull tomcat
docker run -it -p 8080:8080 --name tomcat01 tomcat
故意删除上一步镜像生产tomcat容器的文档,以它为模板commit一个没有doc的tomcat新镜像gaoxiang/tomcat
docker commit -m=“del tomcat docs” -a=“gaoxiang” d536a5c3 gaoxiang/tomcat:1.2
docker images:会出现创建的镜像
Docker容器数据卷:
容器内添加:
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
查看数据卷是否挂载成功: docker inspect 容器ID
命令(带权限): docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
DockerFile添加:
根目录下新建mydocker文件夹并进入
可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
File构建:vim dockerfile2
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
build后生成镜像,获得一个新镜像gaoxiang/centos:docker build -f /mydocker/dockerfile2 -t gaoxiang/centos .
查看创建的镜像:docker images
run容器: docker run -it gaoxiang/centos /bin/bash
Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
DockerFile体系结构(保留字指令)
FROM
基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时需要运行的命令
EXPOSE
当前容器对外暴露出的端口
WORKDIR
指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
ENV
用来在构建镜像过程中设置环境变量
ADD: 拷贝加解压缩
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY
类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
VOLUME
容器数据卷,用于数据保存和持久化工作
CMD
指定一个容器启动时要运行的命令
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
ONBUILD
当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
DockerFile解析:
构建三步骤:编写Dockerfile文件->docker build->docker run
自定义镜像Tomcat9:
mkdir -p /gx/mydockerfile/tomcat9
在上述目录下touch c.txt
将jdk和tomcat安装的压缩包拷贝进上一步目录
在/gx/mydockerfile/tomcat9目录下新建Dockerfile文件:
FROM centos
MAINTAINER gaoxiang<gaoxiangbs@126.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.8.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
构建:docker build -t gxtomcat9 .
run容器: docker run -d -p 9080:8080 --name myt9 -v /gx/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test -v /gx/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs --privileged=true gxtomcat9
安装常用软件
Docker安装Tomcat:
docker search tomcat
docker pull tomcat
docker run -p 8080:8080 --name tomcat8080 -d tomcat
Docker安装Mysql
docker search mysql
docker pull mysql:5.6
docker run -p 12345:3306 --name mysql -v /gx/mysql/conf:/etc/mysql/conf.d -v /gx/mysql/logs:/logs -v /gx/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
命令说明:
-p 12345:3306:将主机的12345端口映射到docker容器的3306端口。
--name mysql:运行服务名字
-v /gx/mysql/conf:/etc/mysql/conf.d :将主机/gx/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d
-v /gx/mysql/logs:/logs:将主机/gx/mysql目录下的 logs 目录挂载到容器的 /logs。
-v /gx/mysql/data:/var/lib/mysql :将主机/gx/mysql目录下的data目录挂载到容器的 /var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
-d mysql:5.6 : 后台程序运行mysql5.6
数据备份小测试:
docker exec myql服务容器ID sh -c ' exec mysqldump --all-databases -uroot -p"123456" ' > /gx/all-databases.sql
Docker安装Redis:
docker pull redis:3.2
docker run -p 6379:6379 -v /gx/myredis/data:/data -v /gx/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
在主机/gx/myredis/conf/redis.conf目录下新建redis.conf文件
vim /gx/myredis/conf/redis.conf/redis.conf
测试redis-cli连接上来:docker exec -it 运行着Rediis服务的容器ID redis-cli
Docker安装ES
docker search elasticsearch
docker pull elasticsearch
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES9200 elasticsearch
Docker安装RabbitMq
docker search rabbitmq:3-management
docker pull rabbitmq:3-management
docker run -d -p 5672:5672 -p 15672:15672 --name rabitmq15672 rabbitmq:3-management
Docker-Compose
安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
常用命令
docker-compose up # 前台运行
docker-compose up -d # 后台运行
docker-compose start # 启动
docker-compose stop # 停止
docker-compose down # 停止并移除容器
docker-compose-mysql.yml
version: '3.1'
services:
db:
image: mysql:8.0.20
restart: always
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
docker-compose-tomcat.yml
version: '3.1'
services:
tomcat:
restart: always
image: tomcat
container_name: tomcat
ports:
- 8080:8080
volumes:
- /usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/test
environment:
TZ: Asia/Shanghai
docker-compose-nexus.yml
version: '3.1'
services:
nexus:
restart: always
image: sonatype/nexus3
container_name: nexus
ports:
- 8081:8081
volumes:
- nexus-data:/nexus-data
volumes:
nexus-data:
docker-compose-gitlab.yml 用户名默认是root
version: '3'
services:
web:
image: 'twang2218/gitlab-ce-zh:11.1.4'
restart: always
hostname: '192.168.219.128'
container_name: 'gitlab'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url '192.168.219.128:8082'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
unicorn['port'] = 8888
nginx['listen_port'] = 80
ports:
- 8082:80
- 443:443
- 2222:2222
volumes:
- ./config:/etc/gitlab
- ./data:/var/opt/gitlab
- ./logs:/var/log/gitlab
harbor:
https://github.com/goharbor/harbor/releases/download/v2.0.0/harbor-offline-installer-v2.0.0.tgz
tar -zxvf harbor-offline-installer-v2.0.0.tgz
cd harbor
vim harbor.yml
hostname: 192.168.219.128
# 第 12 行,注释掉 HTTPS 的相关配置
# https related config
# https:
# https port for harbor, default is 443
# port: 443
# The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
./install.sh
账号:admin
密码:Harbor12345
# 配置客户端
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://lw6hnysy.mirror.aliyuncs.com"
],
"insecure-registries": [
"192.168.219.128"
]
}
# 构建项目(ip:port/image_name:tag)
vim Dockerfile
FROM java:8
ADD hello_world-0.0.1-SNAPSHOT.jar /hello.jar
EXPOSE 8080
CMD ["java","-jar","/hello.jar"]
docker build -t 192.168.219.128/hello:latest .
# 运行项目
docker run -d -p 8080:8080 hello
# 标记本地镜像并指向目标仓库(ip:port/image_name:tag,该格式为标记版本号)
docker tag 192.168.219.128/hello:latest 192.168.219.128/library/hello:1.1.1
# 推送项目
docker push 192.168.219.128/library/hello:1.1.1