Docker 實戰

Docker入門

概述

  Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。

  容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。

  Docker 從 17.03 版本之後分爲 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),我們用社區版就可以了。

注意事項

  • Linux內核版本必須大於:3.8.+
  • 查看內核版本:uname -r

Docker下載及安裝

1、關閉防火牆
systemctl stop firewalld.service


2、修改爲SELINUX=disabled
vim /etc/selinux/config
SELINUX=disabled


3、安裝wget
 yum -y install wget



4、查看docker版本
yum list|grep docker

5、安裝docker
yum install -y docker.x86_64


6、安裝docker ce社區版
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


7、下載社區版本
yum -y install docker-ce-cli.x86_64

8、設置開機啓動
systemctl enable docker

9、更新xfsprogs
yum update xfsprogs

10、啓動docker服務
systemctl start docker

11、查看docker版本
docker version

12、查看docker詳細信息
docker info

 

 

Docker鏡像的搜索及查看刪除

查看本地鏡像

docker images

搜索鏡像

docker search centos

docker search 名字

搜索鏡像並過濾是官方的

docker search --filter "is-official=true" centos

搜索鏡像並過濾大於多少顆星星的

docker search --filter stars=10 centos

下載Centos7鏡像

docker pull centos:7

docker pull 項目:版本號

修改本地鏡像名字(小寫)

docker tag centos:7 mycentos:1

本地鏡像的刪除

方式一
docker rmi centos:7


方式二
docker rmi IMAGE ID

配置阿里雲鏡像加速

Docker基本操作

構建容器

  • -i:表示以交互模式運行容器(讓容器的標準輸入保持打開)
  • -d:表示後臺運行容器,並返回容器id
  • -t:爲容器重新分配一個僞輸入終端
  • --name:爲容器指定名稱

docker run -itd --name=mycontos centos:7

查看本地所有的容器

docker ps -a

查看本地正在運行的容器

docker ps

停止容器

方式一
docker stop NAMES

方式二
docker stop CONTAINER ID

一次性停止所有容器

docker stop $(docker ps -a -q)

一次性全部啓動

docker ps -a -q
docker start $(docker ps -a -q)

啓動容器

docker start CONTAINER_ID / CONTAINER_NAME

重啓容器

docker restart CONTAINER_ID / CONTAINER_NAME

刪除容器

docker rm CONTAINER_ID / CONTAINER_NAME

必須先停止,才能刪除

強制刪除鏡像

docker rm -f CONTAINER_ID / CONTAINER_NAME

查看容器詳細信息

docker inspect CONTAINER_ID / CONTAINER_NAME

進入容器

docker exec -it 0ad5d7b2c3a4 /bin/bash

退出容器

exit

容器的文件複製於掛載

從宿主機複製到容器

docker cp 宿主機本地路徑 容器名稱:容器路徑

從容器複製到宿主機

docker cp 容器名稱:容器路徑 宿主機本地路徑

  這個就不演示了,操作跟上面👆那個相反。

宿主機文件掛載到容器裏(重要)

docker run -itd -v --name=mycentos77 /root/cyb/:/home centos:7

  可以將mysql存儲文件路徑,掛載到容器裏

Docker自定義鏡像

製作鏡像方式

  • 基於Docker Commit製作鏡像
  • 基於dockerfile製作鏡像,Dockerfile方式爲主流的製作鏡像方式

Commit構建自定義鏡像

方式一
docker commit 9bdb420d8ea0  mycentos:v1

語法:docker commit CONTAINER ID PEPOSITORY:TAG


方式二
docker commit -a "chenyanbin" -m "mkdir /home/chenyanbin" 9bdb420d8ea0  mycentos:v2

    -a:標註作者
    -m:說明解釋

查看詳細信息
docker inspect CONTAINER ID

查看本地鏡像
docker images

 

dockerfile構建自定義鏡像 

vi dockerfile


FROM centos:7 
MAINTAINER ybchen [email protected] 
RUN echo "正在構建鏡像!!!" 
WORKDIR /home/chenyanbin 
COPY 123.txt /home/chenyanbin 
RUN yum install -y net-tools


構建:docker build -t mycentos:v1 .

查看:docker images

啓動:docker run -itd mycentos:v1

進入鏡像:docker exec -it mycentos:v1 /bin/bash

FROM

  基於那個鏡像

MAINTAINER

  註明作者

COPY

  複製文件進行鏡像(只能用作相對路徑,不能用絕對路徑)

ADD

  複製文件進入鏡像(如果是.tar.gz文件會解壓)

WORKDIR

  指定工作目錄,假如路徑不存在會創建路徑

ENV

  設置環境變量

EXPOSE

  暴露容器端口

RUN

  在構件鏡像的時候執行,作用於鏡像層面

ENTRYPOINT

  在容器啓動的時候執行,作用於容器層,dockerfile裏有多條時只允許執行最後一條

CMD

  在容器啓動的時候執行,作用於容器層,dockerfile裏有多條時只允許執行最後一條

  容器啓動後執行默認的命令或參數,允許被修改

命令格式

  sheel命令格式:RUN yum install -y net-tools

  exec命令格式:RUN ["yum","install","-y","net-tools"]

Dockerfile實戰

構建jdk8

在宿主機中執行如下命令

1、解壓
tar -xf jdk-8u261-linux-x64.tar.gz

2、移動
mv jdk1.8.0_261 /usr/local/jdk

3、打開:/etc/profile
vi /etc/profile

4、在最下面追加如下命令
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

5、讓配置文件生效
source /etc/profile

編輯dockerfile

1、jdk包必須放到/root的文件夾下

2、編輯dockerfile
vi dockerfile

FROM centos:7
ADD jdk-8u261-linux-x64.tar.gz /usr/local
RUN mv /usr/local/jdk1.8.0_261 /usr/local/jdk
ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

3、構建dockerfile
docker build -t mycentos:jdk .

4、啓動
docker run -itd mycentos:jdk

5、進入容器
docker exec -it xxx /bin/bash

FROM centos:7
ADD jdk-8u211-linux-x64.tar.gz /usr/local
RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk 
ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
ADD apache-tomcat-8.5.35.tar.gz /usr/local
RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]

啓動容器
docker run -itd -p 80:8080 -v /root/test/ROOT:/usr/local/tomcat/webapps/ROOT mycentos:jdk /bin/bash
View Code

構建nginx

1、dockerfile
FROM centos:7
ADD nginx-1.18.0.tar.gz /usr/local
COPY nginx_install.sh /usr/local
RUN sh /usr/local/nginx_install.sh
EXPOSE 80


2、sheel腳本,vi nginx_install.sh
#!/bin/bash 
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel 
cd /usr/local/nginx-1.18.0 
./configure --prefix=/usr/local/nginx && make && make install

3、構建dockerfile
docker build -t mycentos:nginx .

4、啓動,-p 宿主port:容器port
# -p 映射端口
docker run -itd -p 80:80 mycentos:nginx /usr/local/nginx/sbin/nginx -g "daemon off;"


5、進入容器
docker exec -it xxx /bin/bash

6、查看防火牆
firewall-cmd --state

7、停止防火牆
systemctl stop firewalld.service

8、禁止防火牆開機啓動
systemctl disable firewalld.service 

9、開啓防火牆
systemctl start firewalld.service

注:如果訪問不到,查看防火牆是否開啓

構建Redis

1、編輯:vi redis_install.sh
#!/bin/bash
yum install -y gcc gcc-c++ make openssl openssl-devel
cd /home/redis-4.0.11
make && make PREFIX=/usr/local/redis install
mkdir -p /usr/local/redis/conf/
cp /home/redis-4.0.11/redis.conf /usr/local/redis/conf/
sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/conf/redis.conf
sed -i '88s/protected-mode yes/protected-mode no/' /usr/local/redis/conf/redis.conf



2、編寫dockerfile
FROM centos:7
ADD redis-4.0.11.tar.gz /home
COPY redis_install.sh /home
RUN sh /home/redis_install.sh
ENTRYPOINT /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

3、構建容器:
docker build -t mycentos:redis .

4、啓動容器: #6380是宿主機端口,6379是容器的端口
docker run -itd -p 6380:6379 mycentos:redis

5、進入容器
docker exec -it xxx /bin/bash


6、測試redis
/usr/local/redis/bin/redis-cli

構建Mysql

方式一

1、docker 拉取mysql5.7
docker pull mysql:5.7

2、官網地址
https://hub.docker.com/

3、啓動mysql
docker run --name some-mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

4、進入容器
docker exec -it some-mysql env LANG=C.UTF-8 /bin/bash

5、進入mysql
mysql -uroot -proot

6、創庫
create database `db_student`;

7、進入庫
use db_student;

8、建表
drop table if exists `user`;
CREATE TABLE user (
id tinyint(5) zerofill auto_increment not null comment '學生學號',
name varchar(20) default null comment '學生姓名',
age tinyint default null comment '學生年齡',
class varchar(20) default null comment '學生班級',
sex char(5) not null comment '學生性別',
unique key (id) ) engine=innodb charset=utf8;

9、插入幾條記錄
insert into user values('1','小明','15','初三','男');
insert into user values('2','小紅','13','初二','女');

方式二

1、編輯:init.sql
vi init.sql

create database `db_student`;
use db_student;
drop table if exists `user`;
CREATE TABLE user (
id tinyint(5) zerofill auto_increment not null comment '學生學號',
name varchar(20) default null comment '學生姓名',
age tinyint default null comment '學生年齡',
class varchar(20) default null comment '學生班級',
sex char(5) not null comment '學生性別',
unique key (id) ) engine=innodb charset=utf8;
insert into user values('1','小明','15','初三','男');


2、編寫dockerfile
vi dockerfile

FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ENV LANG=C.UTF-8
ADD init.sql .

3、構建鏡像
docker build -t my-mysql:5.7 .

3、啓動mysql
docker run --name some-mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d my-mysql:5.7

4、進入容器
docker exec -it some-mysql env LANG=C.UTF-8 /bin/bash

5、進入mysql
mysql -uroot -proot

6、切換庫
use db_student;

7、查看
select * from user;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章