dockers加速镜像:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://z90yxq2m.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Ubuntu下:
sudo service docker start
查看dockers容器有哪些镜像:
docker images
docker images -q 查看所有镜像的id
删除所有镜像 docker rmi `docker images -q`
删除镜像 docker rmi --force 镜像ID
搜索有哪些镜像
docker search imagename
下载镜像到dockers容器
docker pull imagename
从容器中删除某个镜像
docker rmi redis:5.0
查看官网: https://hub.docker.com
查看容器
创建容器
进入容器
启动容器
停止容器
删除容器
查看容器信息
docker images
-i 容器一直运行 -t 创建终端 -d 后台运行创建容器
1. 创建容器
方法一
docker run -it --name=lk centos:7 /bin/bash
注意 使用 -it参数创建的容器 创建完成立即进入容器,exit就会立马关闭容器
方法二
docker run -id --name=lk1 centos:7
2. 查看容器
docker ps -a
注意 使用 -id参数创建的容器 创建完成不会立即进入容器,exit也不会关闭容器还是后台运行
-it创建的容器一般称为交互式容器, -id创建的容器一般称其为守护式容器
3. 进入容器
docker exec -it lk /bin/bash
4. 停止容器
docker stop lk
5. 启动容器
docker start lk
6. 删除容器
docker rm lk
7. 删除所有容器
docker rm `docker ps -aq` 但是开启状态的容器是不能被删除的
8. 查看容器的信息
docker inspect lk
思考:
通过上面三个问题引入了:
容器的数据卷
数据卷是宿主机中的一个文件和目录
当容器目录和数据卷目录绑定后,双方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷
数据卷的作用:
创建启动容器时,使用 -v 参数 设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录
注意事项:
1. 目录必须是绝对路径
2. 如果目录不存在, 会自动创建
3. 可挂载多个数据卷
多容器进行数据交换
至少需要三个容器
配置数据卷容器的方法
1. 创建启动c3数据卷容器,使用-v参数设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
2. 创建启动c1 ,c2容器,使用--volumes-from参数 设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
安装部署
1. 搜索MySQL镜像
docker search mysql
2. 拉去mysql镜像
docker pull mysql:5.6
3. 在宿主机下创建容器,设置端口映射、目录映射
mkdir ~/mysql
cd mysql
docker run -id -p 3307:3306 --name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
1. 搜索tomcat镜像
docker search tomcat
2. 拉去tomcat镜像
docker pull tomcat
3. 在宿主机下创建容器,设置端口映射、目录映射
mkdir ~/tomcat
cd tomcat
docker run -id -p 8090:8080 --name=c_tomcat \
-v $PWD:/usr/local/tomcat/webapp \
tomcat
4. 外部机器访问tomcat
192.168.31.20:8090
1. 搜索Nginx镜像
docker search Nginx
2. 拉去Nginx镜像
docker pull Nginx
3. 在宿主机下创建容器,设置端口映射、目录映射
mkdir ~/Nginx
cd Nginx
mkdir conf
cd conf
在~/nginx/conf目录下创建nginx.conf文件,
vim nginx.conf
docker run -id -p 80:80 --name=c_nginx \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
4. 外部机器访问tomcat
192.168.31.20:80
nginx.conf的内容是
user administrator root; #配置用户或者组,默认为nobody nobody。
worker_processes 2; #允许生成的进程数,默认为1
pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log /var/log/nginx/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
#accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
#multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include /etc/nginx/mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
#自定义格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
#tcp_nopush on;
#sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
#upstream mysvr {
# server 127.0.0.1:7878;
# server 192.168.10.121:3333 backup; #热备
#}
server {
#keepalive_requests 120; #单连接请求上限次数。
listen 80; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
#proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
#deny 127.0.0.1; #拒绝的ip
#allow 172.18.5.54; #允许的ip
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 404 /404.html; #错误页
# 将服务器错误页重定向到静态页 /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
include /etc/nginx/conf.d/*.conf;
}
1. 搜索Redis镜像
docker search Redis
2. 拉去tomcat镜像
docker pull Redis:5.0
3. 在宿主机下创建容器,设置端口映射、目录映射
mkdir ~/Redis
cd tomcat
docker run -id -p 6379:6379 --name=c_Redis \
Redis:5.0
4. 外部机器访问Redis
192.168.31.20:6379
在/usr/local/docker/gitlab目录下创建一个docker-compose.yml文件
version: '3'
services:
gitlab:
image: 'twang2218/gitlab-ce-zh:9.4'
restart: always
hostname: '172.24.71.184'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://172.24.71.184:8080'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
unicorn['port'] = 8888
nginx['listen_port'] = 8080
ports:
- '8080:8080'
- '8443:443'
- '2222:22'
volumes:
- /usr/local/docker/gitlab/config:/etc/gitlab
- /usr/local/docker/gitlab/data:/var/opt/gitlab
- /usr/local/docker/gitlab/logs:/var/log/gitlab
version: '3'
networks:
my_net:
driver: bridge
ipam:
config:
- subnet: 172.30.0.1/24
services:
gitlab:
image: 'gitlab/gitlab-ce:14.9.5-ce.0'
container_name: gitlab
hostname: 'gitlab.example.com'
restart: always
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://172.24.71.184:8080'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
unicorn['port'] = 8888
nginx['listen_port'] = 8080
# 需要配置到 gitlab.rb 中的配置可以在这里配置,每个配置一行,注意缩进。
# 电子邮件配置:
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxxxxxx@qq.com"
gitlab_rails['smtp_password'] = "授权码,不是密码"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
# 这里的邮箱账号和上面保持一致
gitlab_rails['gitlab_email_from'] = '528746460@qq.com'
user['git_user_email']="528746460@qq.com"
# 配置外部redis
redis['enable']=false
gitlab_rails['redis_host']="127.0.0.1"
gitlab_rails['redis_port']=6379
gitlab_rails['redis_password']='password'
gitlab_rails['redis_database']=10
#配置外部postgresql
postgresql['enable'] = false
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['db_host'] = '127.0.0.1'
gitlab_rails['db_port'] = '5432'
gitlab_rails['db_username'] = 'postgres'
gitlab_rails['db_password'] = 'postgres'
gitlab_rails['db_database'] = "postgres"
ports:
- '8080:8080'
- '8443:443'
- '2222:22'
volumes:
- /usr/local/docker/gitlab/config:/etc/gitlab
- /usr/local/docker/gitlab/data:/var/opt/gitlab
- /usr/local/docker/gitlab/logs:/var/log/gitlab
#- /home/ecs-user/docker/gitlab/public:/opt/gitlab/embedded/service/gitlab-rails/public
shm_size: '256m'
logging:
driver: "json-file"
options:
max-size: "2g"
max-file: "2"
networks:
my_net:
ipv4_address: 172.30.0.6
保存文件后执行下面命令
1. sudo docker-compose up -d
2. sudo docker ps
3. sudo docker logs -f 容器id
如何将自己的项目给到别人,避免水土不服
操作系统组成部分:
Linux 文件系统由 bootfs 和 rootfs 两部分组成
思考:
1.Docker镜像本质是什么? 复用
2.Docker 中一个 centos 镜像为什么只有200MB,而一个 centos 操作系统的 iso 文件要几个个 G ?
3.Docker中一个 tomcat 境像为什么有500MB,而一个 tomcat 安装包只有70多 MB ?.
? docker commit 容器id 镜像名称:版本号
注意对于 有挂载的一些文件 使用docker commit 是不会转为镜像的
镜像文件转为压缩包传给别人使用
下面二选一:
1.docker save 镜像名字:版本号 > 要打包的名字.tar
docker save 镜像名字:版本号 > 要打包的名字.tgz
2.docker save -o 要打包名字.tar 镜像名字:版本号
压缩文件还原成镜像
下面二选一:
1.docker load -i 压缩文件名称
2.docker load < 已打包的镜像名字.tar/tgz
案例一:
执行dockerfile文件
在对应目录下将你的项目jar包发给对应的人员
在创建一个dockerfile
通过 dockerfile 构建镜像: docker bulid - f dockerfile 文件路径﹣ t 镜像名称版本
docker bulid -f ./dockerfile_1 -t websapp .
案例二:
案例:实现步骤
使用dockerfile文件创建镜像,执行下面命令
docker bulid -f ./dockerfile_1 -t centos_hsh:1.0.2 .
是一个编排容器分布式部署的工具
docker pull registry
id - f dockerfile 文件路径﹣ t 镜像名称版本
docker bulid -f ./dockerfile_1 -t websapp .
案例二:
案例:实现步骤
使用dockerfile文件创建镜像,执行下面命令
docker bulid -f ./dockerfile_1 -t centos_hsh:1.0.2 .
是一个编排容器分布式部署的工具
docker pull registry