sudo yum update
yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl daemon-reload
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://ikpg1kma.mirror.aliyuncs.com”]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
添加信任仓库地址
,"insecure-registries": ["127.0.0.1:4433"]
sudo su
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo systemctl enable docker
docker images -q
docker search 镜像
docker search mysql
docker pull 镜像:版本
docker search mysql:5.7
docker rmi 镜像:版本
docker rmi mysql:5.7
没有打标签
docker rmi `docker images -q | awk '/^
/ { print $3 }'`
- 1
镜像名包含关键字
docker rmi --force `docker images | grep none | awk '{print $3}'` //其中none为关键字
- 1
docker ps -a
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
docker run -d -p 8090:80 --name=mynginx nginx:latest
docker exec -it 容器名称 /bin/bash
docker inspect 容器名称
docker rm 容器名称
docker top asp
docker top a76fc395f6ee
docker logs asp
docker logs a76fc395f6ee
docker port asp
docker port a76fc395f6ee
docker ps
docker pause db01
docker unpause db01
docker start asp
docker stop asp
docker restart asp
docker diff mymysql
拉取最新镜像
docker pull mongo
启动mongodb
docker run --name mongo -p 27017:27017 -v /data/mongo:/data/mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin -d mongo
进入容器
docker exec -it mongo bash
进入mongodb
mongo -u admin -p admin
切换数据库
use admin
创建管理员账户
db.createUser({user:“root”,pwd:“root”,roles:[{role:“root”,db:“admin”}]})
拉取镜像
docker pull mysql:5.7
启动mysql
docker run --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 --net=“host” -d mysql:5.7
连接mysql
docker exec -it mysql5.7 bash
navicat 连接docker容器里面mysql服务失败解决
ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘root’ ;
搜索redis镜像
docker search redis
拉取redis镜像
docker pull redis:5.0
创建并启动容器
docker run -d --name=redis5.0 -p 6379:6379 redis:5.0
搜索tomcat镜像
docker search tomcat
拉取tomcat镜像
docker pull tomcat:8.5
创建并启动容器
docker run -d -p 8080:8080 --name=tomcat8.5 tomcat:8.5
在本地模拟一个项目(创建一个hello目录,然后向目录中输出一个文件index.html,内容为hello world)
mkdir ./hello echo “hello world” > ./hello/index.html
从宿主机复制文件到容器(docker cp 宿主机路径 容器名称:容器路径)
docker cp ./hello tomcat8.5:/usr/local/tomcat/webapps/
搜索nginx镜像
docker search nginx
拉取tomcat镜像
docker pull nginx
创建并启动容器
docker run -d --name=nginx -p 80:80 nginx
docker pull nacos/nacos-server
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
docker pull rabbitmq
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin df80af9ca0c9
docker run -dit --restart=always --name myrabbitmq -e RABBITMQ_DEFAULT_USER=haolink -e RABBITMQ_DEFAULT_PASS=haolink -p 15672:15672 -p 5672:5672 rabbitmq:management
https://github.com/wurstmeister/kafka-docker
docker pull wurstmeister/kafka:2.12-2.3.1
docker pull wurstmeister/zookeeper
docker pull sheepkiller/kafka-manager
注意ip填写外网地址
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper:latest
ports:
- "2181:2181"
restart: unless-stopped
kafka:
image: wurstmeister/kafka:2.12-2.3.1
depends_on: [ zookeeper ]
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 192.168.6.76
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
kafka-manager:
container_name: kafka-manager
image: sheepkiller/kafka-manager
depends_on: [ kafka ]
ports:
- "7000:9000"
environment:
ZK_HOSTS: 192.168.6.76:2181
kafka-ui-lite:
container_name: kafka-ui-lite
image: freakchicken/kafka-ui-lite
depends_on: [ kafka ]
ports:
- "8889:8889"
docker-compose up -d
记住启动的启动名称,kafka为 kafka_kafka_1 ,zookeeper 为 kafka_zookeeper_1 .
如果docker-compose正常启动,此时docker ps会看到以上两个容器。进入kafka容器
docker exec -it kafka_kafka_1 bash
创建一个topic
$KAFKA_HOME/bin/kafka-topics.sh --create --topic topic --partitions 4 --zookeeper kafka_zookeeper_1:2181 --replication-factor 1
注意–zookeeper后面的参数为,容器的name
查看刚刚创建的topic
$KAFKA_HOME/bin/kafka-topics.sh --zookeeper kafka_zookeeper_1:2181 --describe --topic topic
发布信息
bash-4.4# $KAFKA_HOME/bin/kafka-console-producer.sh --topic=topic --broker-list kafka_kafka_1:9092
>ni
>haha
同样注意–broker-list后面的参数
接收消息
bash-4.4# $KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server kafka_kafka_1:9092 --from-beginning --topic topic
ni
haha
#!/bin/bash
# 脚本说明:安装kafka
# 环境准备:docker
# 注意事项:修改存放文件的目录、修改公网ip、sed处的ip
IP=192.168.6.111
echo "============================安装docker-compose============================================="
cd /usr/local/bin && wget https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64 && mv docker-compose-Linux-x86_64 docker-compose && chmod 777 docker-compose && docker-compose -version
echo "============================下载镜像======================================================="
docker pull wurstmeister/kafka:2.12-2.3.1
docker pull wurstmeister/zookeeper
docker pull freakchicken/kafka-ui-lite
echo "=============$(pwd)/docker-compose.yml================================================="
tee $(pwd)/docker-compose.yml <<-'EOF'
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper:latest
ports:
- "2181:2181"
restart: unless-stopped
kafka:
image: wurstmeister/kafka:2.12-2.3.1
depends_on: [ zookeeper ]
ports:
- "29092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: IP
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
kafka-ui-lite:
container_name: kafka-ui-lite
image: freakchicken/kafka-ui-lite
depends_on: [ kafka ]
ports:
- "28889:8889"
EOF
echo "========================================sed================================================="
sed -i "s/IP/192.168.6.111/g" $(pwd)/docker-compose.yml
echo "=========================docker-compose up -d==============================================="
docker-compose up -d
数据持久化
容器之间的数据交换
docker run --name mongo -p 27017:27017 -v /data/mongo:/data/mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin -d mongo
docker run -d --name=tomcat1 -p 8081:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5
docker run -d --name=tomcat2 -p 8082:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5
docker commit 容器id 镜像名称:版本号
docker commit -m"test" -a"wzd" d4b129c7f9c8 registry.cn-hangzhou.aliyuncs.com/123:123
Dockerfile是一个用于描述生产docker镜像的文件,它里面是一条条的指令,每条指令都会对镜像产生一定影响。
案例:基于jdk1.8环境运行springboot项目,打包为镜像
2)创建一个springboot-dockerfile文件,内容如下
# 定义基础镜像(从哪个镜像的基础上开始做)
FROM java:8
# 将jar包添加到容器,并改名为app.jar
ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
# 镜像启动容器的时候,执行的命令
CMD java -jar app.jar
# -f :指定要使用的Dockerfile路径 -t :指定生成的镜像名称 . 镜像构建过程中的上下文环境的目录
docker build -f ./springboot-dockerfile -t lofxve .
docker run -d -p 18080:8080 lofxve:latest
5)访问测试
ENV LANG zh_CN.UTF-8
ENV LANGUAGE zh_CN:en
ENV LC_ALL zh_CN.UTF-8
FROM ubuntu:18.04
# Install Chrome for Selenium
RUN curl https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -o /chrome.deb
RUN dpkg -i /chrome.deb || apt-get install -yf
RUN rm /chrome.deb
# Install chromedriver for Selenium
RUN curl https://chromedriver.storage.googleapis.com/2.31/chromedriver_linux64.zip -o /usr/local/bin/chromedriver
RUN chmod +x /usr/local/bin/chromedriver
将镜像保存成tar包: docker save -o 导出文件名 镜像:版本
docker save -o ./lofxve.tar lofxve:latest
接下来删除我们本地的mynginx:hehe镜像
docker rmi lofxve:latest
然后再从tar包中将镜像导入到本机
docker load < ./lofxve.tar
docker load -i ./lofxve.tar
#!/bin/bash -v
echo "脚本开始执行"
name=registry.cn-hangzhou.aliyuncs.com/test_wzd/crawler-platform
tag=$(date -d today +"%Y%m%d")
echo "构建镜像!"
docker build -t $name:$tag -f Dockerfile .
echo "镜像成功生成"
docker login --username= --password= registry.cn-shanghai.aliyuncs.com
echo "登录镜像仓库成功!"
docker push $name:$tag
docker tag $name:$tag $name:latest
docker push $name:latest
echo "镜像推送完成!"
Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用
Compose通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。
安装docekr compose 工具
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-
uname -s
-uname -m
-o /usr/local/bin/docker-compose
设置权限
chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose -version
cd /usr/local/bin && wget https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64 && mv docker-compose-Linux-x86_64 docker-compose && chmod 777 docker-compose && docker-compose -version
通过docker compose进行容器批量管理:一次性启动三个容器(nginx,tomcat,redis)
1) 创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
2) 创建docker-compose.yml文件,内容如下
version: '3'
services:
nginx:
container_name: my_nginx
image: nginx
ports:
- 80:80
tomcat:
container_name: my_tomcat
image: tomcat:8.5
ports:
- 8080:8080
redis:
container_name: my_redis
image: redis:5.0
ports:
- 6379:6379
3) 启动容器
# 为了演示效果更佳明显,我们使用下面命令先停止并删除所有容器
docker stop $(docker ps -q)
docker rm $(docker ps -aq)
# 执行命令,启动容器
# 执行此命令的时候,需要和配置文件在同一个目录下
docker-compose up -d
# 执行此命令的时候,需要和配置文件在同一个目录下
docker-compose down
相同:
不同: